完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
作为控制器,我希望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 个讨论
|
|
初始化部分的顺序调整下,这里给你个例程看看
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,具体原因我现在还没有完全理解。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
340 浏览 1 评论
533 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
777 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
653 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1132 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
63浏览 29评论
164浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
253浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
203浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
60浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 01:25 , Processed in 1.037484 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号