低端问题1,对于TMS570LS31X USB系列的GIO的Port B中的第八位,问其(中断)设置为什么是黑色的。是不是我错过了什么
低端问题2,对于GIO中断函数怎么写???
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.
低端问题1,对于TMS570LS31X USB系列的GIO的Port B中的第八位,问其(中断)设置为什么是黑色的。是不是我错过了什么
低端问题2,对于GIO中断函数怎么写???
你好,
#1, GIOB第8位,即GIO[7]可以用作中断源,Halcogen中的确是灰色了,不能配置,你可以直接修改生成的代码使能这个中断。修改gio.c中的以下语句。
/** - enable interrupts */
gioREG->INTENASET = 0U /* Bit 0 */
| (0U << 1U) /* Bit 1 */
| (0U << 2U) /* Bit 2 */
| (0U << 3U) /* Bit 3 */
| (0U << 4U) /* Bit 4 */
| (0U << 5U) /* Bit 5 */
| (0U << 6U) /* Bit 6 */
| (0U << 7U) /* Bit 7 */
| (0U << 8U) /* Bit 8 */
| (0U << 9U) /* Bit 9 */
| (0U << 10U) /* Bit 10 */
| (0U << 11U) /* Bit 11 */
| (0U << 12U) /* Bit 12 */
| (0U << 13U) /* Bit 13 */
| (0U << 14U) /* Bit 14 */
| (1U << 15U);/* Bit 15 */
#2,GIO中断函数。首先,你需要在Halcogen中配置GIO模块的中断向量。然后, 在生成的i原文件中,你将可以找到"notification.c",找到以下函数。
void gioNotification(gioPORT_t *port, sint32 bit)
{
/* enter user code between the USER CODE BEGIN and USER CODE END. */
/* USER CODE BEGIN (19) */
/* USER CODE END */
}
在这里你可以写GIO的中断处理程序。
Regards,
Jay
你好,
Halcogen配置GIO模块中断,首先需要使能GIO模块中断。
在“TMDX570LS31USB”大标签下的“VIM Channel 0-31”使能GIO模块的中断。高优先级中断为第9个通道,低优先级中断为23通道。如下图所示。你可以同时使能两个通道,也可以只使能其中一个。
根据#1所述,使能GIO模块中GIOB【7】的中断。
使用Halcogen生成代码中,在sys_vim.c中,你可以看到GIO的两个中断向量,如下。
gioHighLevelInterrupt 和 gioLowLevelInterrupt 这两个函数定义在gio.c中,如下。
可以看到,这两个中断函数均调用了中断处理函数gioNotification。这个函数的定义就在notification.c中。
Regards,
Jay
有没有sci接收中断的例程?
中断初始化
_enable_interrupt_();
sciEnableNotification(sciREG, SCI_RX_INT); //enable interrupt
sciHighLevelInterrupt(); //enter sciNotification()
中断函数scinotification()中
void sciReceive(sciBASE_t *sci, uint32 length, uint8 * data)
是不是这样子的
ml0943 说:有没有sci接收中断的例程?
中断初始化
_enable_interrupt_();
sciEnableNotification(sciREG, SCI_RX_INT); //enable interrupt
sciHighLevelInterrupt(); //enter sciNotification()
中断函数scinotification()中
void sciReceive(sciBASE_t *sci, uint32 length, uint8 * data)是不是这样子的
除此之外,还需要在sys_startup.c中打开SCI对应中断,并在sys_vim.c中把中断处理函数加入中断向量表。
Jay,
你好,非常感谢你的指导
我在LinlinHighLevelInterrupt()中打断点,发现其实是可以进入这个函数的,但是在到达case11,也就是串口接收中断的case块时,由于g_sciTransfer_t[1U].rx_length被sciInit()设置为默认值0,所以无法通过if条件句调用sciNotification(scilinREG, SCI_RX_INT),
我尝试过在sciInit()中设置g_sciTransfer_t[1U].rx_length=1,然后每次循环开始时调用一次sciInit(),但是串口最终却只能发送一串FF,不知为何。。
我最终的解决方法是把case 11块中除了sciNotification()之外所有的语句都删掉,这样只要接收到一个字节就可以确保触发接收中断,而且最终串口发送出来的就是我写入的数据,算是比较好的解决了这个问题
但是总感觉动系统函数有些不保险,您有更好的解决方法吗?
非常感谢