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.

对于HALCode Generator中的一些疑问

Other Parts Discussed in Thread: HALCOGEN, TMS570LS3137

低端问题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的中断处理程序,问您能不能给个简单具体的使用过程。

  • 你好,

    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,

    你好,

    能否讲一下具体的“在sys_startup.c中打开SCI对应中断,以及在sys_vim.c中把中断处理函数加入中断向量表”的流程?(最好配图说明?)

    我没看懂这两句话@_@。。。

    多谢您了

  • 如果你用Halcogen配置了SCI中断,并重新生成了工程,在sys_startup.c 和sys_vim.c中会自动加入这些信息的。

    能否把你的这两个文件发上来看看。

  • Jay,

    你好,谢谢你的提示,附件里是我用Halcogen配置之后重新生成工程中的sys_startup.c,sys_vim.c和sys_main.c,

    我用串口调试工具向TMS570LS3137发送数据时,发现进入不了接收中断,

    请你帮我看一下什么地方配置有错误

  • 我发现一次回帖只能上传一个附件。。这是sys_startup.c

  • 我看你使能了LINSCI模块的高优先级中断。

    建议你在linsci模块的源文件的linHighLevelInterrupt中断中打个断点看看,有没有进中断。

  • 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()之外所有的语句都删掉,这样只要接收到一个字节就可以确保触发接收中断,而且最终串口发送出来的就是我写入的数据,算是比较好的解决了这个问题

    但是总感觉动系统函数有些不保险,您有更好的解决方法吗?

    非常感谢

  • 朋友 你这个问题 找到原因了吗?难道真得改系统函数吗?

    到达case11,也就是串口接收中断的case块时,由于g_sciTransfer_t[1U].rx_length被sciInit()设置为默认值0,所以无法通过if条件句调用sciNotification(scilinREG, SCI_RX_INT),


      同问啊

  • sciInit()函数只需要调用一次。

    不建议修改Halcogen生成的代码,那样用Halcogen再次生成后,又需要修改。

    你可以看一下,进LinlinHighLevelInterrupt后的中断标志位是什么状态,再来看看,是什么问题,应该从哪个if条件进入sciNotification而没有进入。