一、调试目的及相关知识
目的:使能GP1[1]引脚作为输出IO,输出高低电平。
相关知识:1、谁为GPIO供电? (alwon电源域)
2、谁为GPIO提供时钟?(
 由两种时钟源:1、SYSCLK6提供interface clock
 2、SYSCLK18 提供Debounce Functionalclock 应用消抖 )
二、硬件图

由上图可知将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://www.eeskill.com/group/topic/id/1669。