本帖最后由 chenyu988 于 2014-9-11 08:57 编辑
FAQ 标题: PF0,PD7作为GPIO口用,需要哪些注意事项。FAQ 正文: 上电复位后,PF0 PD7默认是NMI功能,而不是GPIO。而且,为了保护这两个引脚不被偶然的配置成GPIO, PF0 PD7的commit Control寄存器被置0(这样GPIO功能无法更改),同时被LOCK。 需要对其unlock,然后修改commit control 为1(允许更改GPIO功能),再配置成GPIO功能即可。参考代码在下面:
int main(void) { volatile unsigned long ulLoop; // unlock PF0 & PD7 GPIO_PORTF_LOCK_R = 0x4C4F434B; GPIO_PORTD_LOCK_R = 0x4C4F434B; GPIO_PORTF_CR_R = 0x1; GPIO_PORTD_CR_R = (1<<7); // // Enable the GPIO port that is used for the on-board LED. // SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOG | SYSCTL_RCGC2_GPIOF | SYSCTL_RCGC2_GPIOD; // // Do a dummy read to insert a few cycles after enabling theperipheral. // ulLoop = SYSCTL_RCGC2_R; // // Enable the GPIO pin for the LED (PG2). Set thedirection as output, and // enable the GPIO pin for digital function. // GPIO_PORTG_DIR_R = 0x04; GPIO_PORTG_DEN_R = 0x04; // PF0 GPIO_PORTF_DIR_R = 0x01; GPIO_PORTF_DEN_R = 0x01; // PD7 GPIO_PORTD_DIR_R = (1<<7); GPIO_PORTD_DEN_R = (1<<7); // // Loop forever. // while(1) { // // Turn on the LED. // GPIO_PORTG_DATA_R |= 0x04; GPIO_PORTF_DATA_R |= 0x01; GPIO_PORTD_DATA_R |= (1<<7); // // Delay for a bit. // for(ulLoop = 0; ulLoop < 200000; ulLoop++) { } // // Turn off the LED. // GPIO_PORTG_DATA_R &= ~(0x04); GPIO_PORTF_DATA_R &= ~(0x01); GPIO_PORTD_DATA_R &= ~(1<<7); // // Delay for a bit. // for(ulLoop = 0; ulLoop < 200000; ulLoop++) { } } }
附件是MSP430的常见问题汇总,利尔达出品,是从网上down下来的,供网页参考。
MSP430常见问题汇总.pdf
(599.22 KB)
Revision History:为避免坛友及斑竹误会,修改了标题和FAQ内容,附件的常见问题汇总我之前就已说明来源于网络。
|