TI论坛
直播中

杨芳

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

请问TM4C123G外部中断设置的高电位中断端口要接受到的电压超过多少才算高电位呢?

作为控制器,我希望TM4C123G可以接收来自其他传感器的高电位中断信号。所以我设置了PD7作为中断接收点。可是在运行过程中似乎并没有实现。
并且我也有在startup里注册中断程序  并且我的UART中断是可以正常工作的,所谓的高电位中断,端口要接受到的电压超过多少才算高电位呢?在D7口与传感器管脚之间,还需要增加电阻之类的东西吗?

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);                                                          //使能PORT D
GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_DIR_MODE_IN);            //设置D7为中断输入
GPIOIntRegister(GPIO_PORTD_BASE, PortDIntHandler);                                                 //注册中断程序
GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_7);                                         //设置D7为中断输入
GPIOIntTypeSet(GPIO_PORTD_BASE, GPIO_PIN_7 , GPIO_HIGH_LEVEL);               //设置D7高电位时中断
GPIOIntEnable(GPIO_PORTD_BASE, GPIO_PIN_7);                                                         //使能D7的中断
IntEnable(INT_GPIOD);
IntMasterEnable();

是不是还少了什么? 望各位前辈斧正!

回帖(3)

韦明

2018-8-14 06:13:08
初始化部分的顺序调整下,这里给你个例程看看
M4C123G 所有的外设接口都可以设置成外部中断源。下面以一个例子来说明。下面这个例程PD6和PD7作为中断源,分别接按钮;PF1和PF3分别驱动一个LED灯;当按下其中一个按钮时,可以驱动一个LED灯点亮。首先设置时钟,使用LED驱动端全能输出:    // 设置系统主频    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN            | SYSCTL_XTAL_16MHZ);    // Enable and configure the GPIO port for the LED operation.    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);(似乎用的外设,都必须先使能,这个印象中看到过说明,这些外设默认是不能用,要想用到这些外设,必须先使能)下面这个代码是使相应LED驱动端为输出。    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,RED_LED|BLUE_LED|GREEN_LED);下面介绍如何设置外部中断:void Init_Int_Key() [     // Make PD6/7 an output.使能外部中断源外设:    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);按钮接入端设置为输入:    GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7, GPIO_DIR_MODE_IN);端口设置功率和弱上拉:    GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7, GPIO_STRENGTH_2MA,    GPIO_PIN_TYPE_STD_WPU);中断设置为低电平触发:    GPIOIntTypeSet(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7, GPIO_LOW_LEVEL);使能相应端口中断    GPIOIntEnable(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7);使能中断:    IntEnable(INT_GPIOD);这个应该是使能全局中断:    IntMasterEnable();(不理解为什么要设置这么多中断)下面是清除相应端口中断标志:    GPIOIntClear(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7);]下面这一段是中断响应程序,比较易理解,这里只是贴出。void Int_GPIO_D_Handler(void)[       unsigned long ulStatus;       // 读取中断状态       ulStatus = GPIOIntStatus(GPIO_PORTD_BASE, true);       // 清除中断状态       GPIOIntClear(GPIO_PORTD_BASE, ulStatus);       // 如果KEY的中断状态有效       if (ulStatus & GPIO_PIN_7)       [              // 延时约10ms,消除按键抖动              SysCtlDelay(10 * (SysCtlClockGet() / 3000));              // 等待KEY抬起              while (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_7) == 0x00);              // 延时约10ms,消除松键抖动              SysCtlDelay(10 * (SysCtlClockGet()  / 3000));              //TODO 逻辑处理//            if(cur_Col < (NUM_CHAR - 1))//                   cur_Col++;               GPIOPinWrite(GPIO_PORTF_BASE,                            RED_LED|BLUE_LED|GREEN_LED, RED_LED);              // Delay for a bit              SysCtlDelay(200000);       ]        if (ulStatus & GPIO_PIN_6)// 如果KEY的中断状态有效       [              // 延时约10ms,消除按键抖动              SysCtlDelay(10 * (SysCtlClockGet() / 3000));              // 等待KEY抬起              while (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_6) == 0x00);              // 延时约10ms,消除松键抖动              SysCtlDelay(10 * (SysCtlClockGet()  / 3000));              //TODO 逻辑处理              //            if(cur_Col > 0)              //                   cur_Col--;               // Turn on the Green LED              GPIOPinWrite(GPIO_PORTF_BASE,                            RED_LED|BLUE_LED|GREEN_LED, GREEN_LED);              // Delay for a bit              SysCtlDelay(200000);       ]]下面是主程序代码:int main(void) [// 设置系统主频SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN                     | SYSCTL_XTAL_16MHZ);// Enable and configure the GPIO port for the LED operation.SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,RED_LED|BLUE_LED|GREEN_LED);Init_Int_Key();while(1)       [       ]]注意:1)        包含头文件路径必须要添加,这个在前面已经说明;2)        必须在工程中添加文件:startup_ccs.c(目前还没有完全理解这个文件工作过程,这里只是提示一下,不做解释);3)        必须添加一个宏定义:右键工程文件名→Properties→Build→ARMCompiler→Advance Options→Predefined Symbols,在Pre-definge NAME中添加变量:PART_TM4C123GH6PM和TARGET_IS_BLIZZARD_RA1,具体原因我现在还没有完全理解。
举报

杨芳

2018-8-14 06:18:53
引用: ljmlvmd 发表于 2018-8-14 06:13
初始化部分的顺序调整下,这里给你个例程看看
M4C123G 所有的外设接口都可以设置成外部中断源。下面以一个例子来说明。下面这个例程PD6和PD7作为中断源,分别接按钮;PF1和PF3分别驱动一个LED灯;当按下其中一个按钮时,可以驱动一个LED灯点亮。首先设置时钟,使用LED驱动端全能输出:    // 设置系统主频    SysCtlClockSe ...

找到原因了,我把接收中断的引脚设置成了PC5,然后就神奇的好了,哈哈。 
举报

韦明

2018-8-14 06:34:21
引用: luwan 发表于 2018-8-14 06:18
找到原因了,我把接收中断的引脚设置成了PC5,然后就神奇的好了,哈哈。 

你这也太诡异了吧,不科学。还是建议你按照上面的例程配置来。
举报

更多回帖

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