DM8168硬件调试-GPIO

 

一、调试目的及相关知识

        目的:使能GP1[1]引脚作为输出IO,输出高低电平。

        相关知识:1、谁为GPIO供电?       ( alwon电源域)

                          2、谁为GPIO提供时钟?(   

                               由两种时钟源:1、SYSCLK6提供interface clock  

                                                        2、SYSCLK18 提供Debounce Functional clock  应用消抖 )

二、硬件图

      

                                  由上图可知将U2复用引脚配置成 GP1[1]功能

 

三、软件

基本思路:

 第一步:电源、时钟

          GPIO使用alwon电源域,始终供电(只要开发板上电)。而GPIO时钟在evm816x.gel文件中开启。

Setup_PRCM()
{
.......................................................
    /* Enable the OCMC1RAM Clocks */
.................................
    WR_MEM_32(CM_ALWON_L3_SLOW_CLKSTCTRL, 0x2); // Enable the Power Domain Transition of L3 Slow Domain Peripheral
    while((RD_MEM_32(CM_ALWON_L3_SLOW_CLKSTCTRL) & 0x2) !=0x2);

    while((RD_MEM_32(0x4818154c) & 0x3) !=0x2);
    WR_MEM_32(0x4818155c,               0x102); // Enable GPIO0 Clock
    while((RD_MEM_32(0x4818155c) & 0x3) !=0x2);
    WR_MEM_32(0x48181560,               0x102); // Enable GPIO1 Clock
    while((RD_MEM_32(0x48181560) & 0x3) !=0x2);
................................................................
    GEL_TextOut("PRCM Setup Complete\n");
}

 

第二步:复用引脚配置

       在evm816x.gel文件配置 或用户程序中配置。

       第一种:在evm816x.gel文件中

Setup_PADCTRL( )
{
    GEL_TextOut( "Configuring Pad Functions...\n" );
     .................................................
    *(unsigned int *)(0x48140A74) = 0x0A; //配置成GP1[1]
}

       第二种:在用户程序中设置

       main()

      { ............................................................................

                    *(volatile Uint32 *)(0x48140A78) = 0x0A;  //配置成GP1[2]

      }

第三步:输出、数据等设置

             在用户程序中设置

void main( void )
{
..........................................................
    *(volatile Uint32 *)(0x48140A78) = 0x0A;

    *(volatile Uint32 *)(0x4804C134) = 0xFFF0;//配置GPIO1_OE,设置GPIO1[3:0]为输出
    while(1)
    {
		*(volatile Uint32 *)(0x4804C13C) = 0x0F; //配置GPIO1_DATAOUT,设置GPIO1[3:0]为高电平
		EVM816X_waitmsec(50);
		*(volatile Uint32 *)(0x4804C13C) = 0x00;//配置GPIO1_DATAOUT,设置GPIO1[3:0]为低电平
		EVM816X_waitmsec(50);
    }

}

四、现象

     GP1[1]引脚输出大约50ms方波,而GP1[2]引脚输出0.5V电平。why?

     1、 通过JTAG调试,查看复用引脚配置寄存器PINCTRL可知:查看PINCTRL158配置GP1[1]成功,而PINCTRL159配置GP1[2]失败。

而PINCTRL寄存器定义如下:

 

    2、导致原因及解决办法

      因为DM8168工作模式导致的,默认工作在usr用户模式,而有些寄存器设置(时钟配置寄存器、引脚复用寄存器等)需要在Supervisor模式设置。所以需要修改为Supervisor模式。具体操作详见:http://blog.csdn.net/hailin0716/article/details/25065549

     

 

                                

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值