TI论坛
直播中

张秀云

7年用户 175经验值
私信 关注
[问答]

stellaris NMI复用管脚该怎么解锁?

大家好,最近我在使用TM4C123时,对PFO口不能操作。后来查看,可能是其复用NMI功能,要使用得先将其解锁,才能正常当做IO使用。下面是我的代码,大家帮忙看看,谢谢了!
int main(void)
[
   volatile unsigned long ulLoop;

  SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                               SYSCTL_XTAL_16MHZ);

  /*HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
     HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = 0x01;

     GPIOPadConfigSet(GPIO_PORTF_BASE, 0x01,GPIO_STRENGTH_2MA,
                                         GPIO_PIN_TYPE_STD);
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, 0x01);
     HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
    HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = 0x00;
     HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;
*/
      SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
      GPIOPadConfigSet(GPIO_PORTF_BASE, 0x02,GPIO_STRENGTH_2MA,
                                           GPIO_PIN_TYPE_STD);
      GPIODirModeSet(GPIO_PORTF_BASE, 0x02, GPIO_DIR_MODE_OUT);
   while(1)
    [
             GPIO_PORTF_DATA_R |= 0x03;
             for(ulLoop = 0; ulLoop < 200000; ulLoop++)
                     [
                    ]
            GPIO_PORTF_DATA_R &= ~(0x03);
             for(ulLoop = 0; ulLoop < 200000; ulLoop++)
                  [
                  ]
     ]
]
现在的问题是:
(1)当将/* */内容注释掉,PF1口可以正常输出高低电平;
(2)但是添加/* */解锁的代码,此时PF0口并不能输出高低电平,而且它还会影响PF1端口,此时PF1的端口没有信号
(3)我想问问我这样解锁正确吗?哪里还需要修改?
(4)另外我注意到,在Stellaris的库文件包里,inc/gpio.h中,
                  #define GPIO_LOCK_KEY 0x1ACCE551 // Unlocks the GPIO_CR register
                 #define GPIO_LOCK_KEY_DD 0x4C4F434B // Unlocks the GPIO_CR register on
                                                                                                 // DustDevil-class devices and
                                                                                               // later
          但是在对应的器件头文件中,例如lm4f111e5qr.h中
             #define GPIO_LOCK_KEY 0x4C4F434B // Unlocks the GPIO_CR register
        此时编译的时候就会报错,我现在的处理方法是将inc/gpio.h注释掉,因为在代码中并没有用到GPIO_LOCK_KEY,所以这种处理方式合适不?

回帖(1)

周雯葭

2019-9-4 09:24:16
下载最新的TIVAWARE, 在INC/HW_GPIO.H文件中有定义
GPIO_LOCK_KEY 0X1acce551
GPIO_LOCK_KEY_DD 0X4C4F434B
 在Dusdevil之后的芯片就是用GPIO_LOCK_KEY_DD。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分