主题中讨论的其他器件:TM4C123
您好!
我正在尝试使 FXOS8700 accelmag 和 FXAS21002陀螺仪与 TM4C123 MCU 配合使用。 到目前为止、我编写了 i2c 驱动程序、使传感器初始化并生成中断、处理这些中断并从 i2c 读取数据。 发生的情况是、如果我将代码配置为仅与一个传感器一起工作、它就会工作、但是如果我有两个中断、一段时间(例如30-60秒)后、中断处理机制中的一个会失败。
以下是代码的相关部分:
//陀螺仪中断引脚设置 SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC); GPIOPinTypeGPIOInput (GPIO_PORTC_BASE、GPIO_PIN_4); GPIOPadConfigSet (GPIO_PORTC_BASE、GPIO_PIN_4、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD); GPIOIntDisable (GPIO_PORTC_BASE、GPIO_PIN_4); GPIOIntClear (GPIO_PORTC_BASE、GPIO_PIN_4); GPIOIntRegister (GPIO_PORTC_BASE、gyro_ISR); GPIOIntTypeSet (GPIO_PORTC_BASE、GPIO_PIN_4、GPIO_FALLING_EDGE); GPIOIntEnable (GPIO_PORTC_BASE、GPIO_PIN_4); // accelmag 中断引脚设置 SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); GPIOPinTypeGPIOInput (GPIO_Porte _BASE、GPIO_PIN_2); GPIOPadConfigSet (GPIO_Porte _BASE、GPIO_PIN_2、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD); GPIOIntDisable (GPIO_Porte _BASE、GPIO_PIN_2); GPIOIntClear (GPIO_Porte _BASE、GPIO_PIN_2); GPIOIntRegister (GPIO_Porte _BASE、accelmag_ISR); GPIOIntTypeSet (GPIO_Porte _BASE、GPIO_PIN_2、GPIO_RISE_EDGE); GPIOIntEnable (GPIO_Porte _BASE、GPIO_PIN_2);
PC4配置为下降沿、PE2 配置为上升沿、连接到传感器板、陀螺仪配置为生成有源0输出(用于下降沿)、accelmag 板配置为生成有源1输出。
//陀螺仪中断服务例程 void gyro_ISR (void){ if (GPIOIntStatus (GPIO_PORTC_BASE、false)& GPIO_PIN_4){ GPIOIntClear (GPIO_PORTC_BASE、GPIO_PIN_4); gyro_data_ready = true; } } // accelmag 中断服务例程 void accelmag_isr (void){ if (GPIOIntStatus (GPIO_Porte _BASE、false)& GPIO_PIN_2){ GPIOIntClear (GPIO_Porte _BASE、GPIO_PIN_2); accelmag_data_ready = true; } }
这里是中断处理程序。 它们只标记 volatile 布尔值、以便我可以从主循环读取传感器。
在主循环中、我检查这些布尔值、然后读取数据:
while (1){ //CURRENT_TIME = nh.now(); if (gyro_data_ready){ GyroGetData (FXAS21002C_address、&gyroRD); gyro_data_ready = false; } if (accelmag_data_ready){ AGGetData (FXOS8700地址、&accelRD、&magRD); accelmag_data_ready = false; } }
无论我尝试了什么、我都无法消除此错误。 accelmag 的高电平有效中断卡在1、这意味着传感器未被读取(这将清除传感器上的中断)
一开始我以为这与 FXOS8700 accelmag 或 FXAS21002陀螺仪传感器有关、但此时我认为这与中断有关。 在某种程度上、传感器上升中断线路、但中断不会触发、因为会发生其他中断。 要支持此理论:
答:通过仔细检查两条中断线路、(通过录像)我可以证明、当两个中断同时触发时、会发生功能错误。
b.我将故障 accelmag 中断从 PE2替换为 PB4。 这一次 PC4上的另一个中断线路失败(来自陀螺仪)
下面是视频链接: twitter.com/altineller/status/1170381044115283973 (我必须将其放在 Twitter 上、因为 Vimeo 看起来不像示波器射门)
对有关该问题的任何想法、帮助和建议都非常赞赏。
此致、
CAN






