This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的 TI 专家:
我尝试使用三个 ISR 在我们的项目中执行。
ADCAISR 将每100us 执行一次。
Timer1将向外部器件传输数据、并每500us 执行一次。
SCIARXISR 将从外部器件接收数据。
我参考示例代码和 TI wiki (https://processors.wiki.ti.com/index.php/Interrupt_Nesting_on_C28x)来构建软件优先级。
当中断启动时、三个中断正常工作、但5秒后 SCIRXISR 将不会被触发
我们的设置是否有问题?
下图是 SCIRXISR 中的异常情况。
CH1:ADCAISR-100us
CH2:SCIARXISR
CH3:Timer1ISR-500us
CH4:SCIA RX 信号
相关代码如下:
#define INT1PL 1 //组1中断的全局优先 级#define INT2PL 0 //组2中断的全局优先 级#define INT3PL 0 //组3中断的全局优先 级#define INT4PL 0 //组4中断的全局优先 级#define INT5PL 0 //组5中断的全局优先 级#define INT6PL 0 //全局优先级 组6中断的优先级 #define INT7PL 0 //组7中断的全局优先 级#define INT8PL 0 //组8中断的全局优先 级#define INT9PL 2 //组9中断的全局优先 级#define INT10PL 0 //组10中断的全局优先 级#define INT11PL 0 //组11中断的全局优先 级#define INT12PL 0 //组12中断的全局优先 级#define INT13PL 3 // INT13的全局优先级(TINT1) #define INT14PL 0 // INT14的全局优先级(TINT2) #define INT15PL 0 //数据记录的全局优先 级#define INT16PL 0 // RTOSINT _中断写入 A1void (eGPIO); // 堆栈上保存 IER 寄存器 // volatile uint16_t tempPIEIER = HWREGH (PIECTRL_base + PIE_O_IER1); // 设置全局和组优先级以允许 CPU 中断 //具有更高优先级 // IER |= M_INT1; IER &= MINT1;//设置全局和组优先级以允许 CPU 中断// clearR1&PI_ACTRL ;// 清除中断1 (HW1) _asm (" NOP"); EINT; // //在此插入 ISR 代码 // if (true = ADC_getInterruptOverflowStatus (ADCA_BASE、ADC_INT_NUMBER1)) { ADC_clearInterruptOverberStatus (ADCA_BASE、ADC_INT_NUMBER1); }ADC_clearInterflowStatus (ADC_INT_BASE);ADCA_INT_NUMBER1;ADCA_INT_INT_NUMBER1 // //禁用中断并恢复寄存器已保存: // DINT; HWREGH (PIECTRL_BASE + PIE_O_IER1)= tempPIEIER; GPIO_writePin (6、0); } __interrupt void cpuTimer1ISR (void) { GPIO_writePin (12、1); // 将 GPIO/ INTR+设置为全局优先级 ; //将 Timere+代码设置为允许 Timere+计数;//将 TimereDP0+/ INTRI +计数设置为允许全局优先级;// // //禁用中断 // DINT; GPIO_writePin (12、0); } __interrupt void sciaRxISR (void) { GPIO_writePin (8、1); // 将 IER 寄存器保存在栈 上// volatile uint16_t INTIEIER = HWREGH (PIECTRL_base + PIE_O_R9) ;//设置为更高优先级的中断//全局优先级/9;//将 temp_INTIE9设置为更高的中断// IER &= MINT9; HWREGH (PIECTRL_BASE + PIE_O_IER9)&= MG9_1; // 启用中断 // Interrupt_clearACKGroup (0xFFFFFFU); __asm (" NOP"); EINT; // //在此处插入代码 // //启用中断// Interrupt_SCI_BASE (0xFFFFFF_PI_RESET_PIR);// RESET_RESET_RIC_RESET_REUST_REUST_REUSCI_RINT ( 8、PI_REUSCI_RESTRL);// RESET_RESET_IN_REUST_REUST_REUST_PRISI (0)寄存器+ PI_RESET_IN_RESET_IN_RESET_INTRI);// RESET_RESET_RESET_RESET_INTRI (8、PI_IN_RESTRL
您好!
我正在研究这个问题。 此外、请参阅"C2000Ware_3_01_00_00\driverlib\f28004x\examples\interrupt"下最新 C2000Ware 软件包中的"interrupt_ex2_sw_Prioritization "示例、以正确配置 ISR 以启用中断嵌套。
谢谢
Vasudha
Vasudha、您好!
感谢您的快速回复。
我已经检查了"interrupt_Ex2_SW_Prioritization "示例并使嵌套中断代码。
但中断条件仍然有问题。
请帮助解决该问题
谢谢
卡斯珀
Vasudha、您好!
我发现这种情况可以避免该问题的发生。
在该设置中、ADC 的 SOC 将由 PWM 触发。
如果我将 ADC 的触发源从 PWM 更改为软件、问题就会消失。
如果您需要任何高级信息、请告诉我。
谢谢
卡斯珀