TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678 CORE1串口接收中断配置

各位专家:

       本次求助的目标:在C6678的CORE1上配置串口接收中断,用于通信数据接收与协议解析。以官方开发包内串口DEMO程序为基础:K1_STK_v1.1\UART。其内部关于串口中断配置代码理解如下(函数KeyStone_UART_Interrupts_Init):

       第一步,选定CIC输出通道,这里选取的是通道33,对应CIC0_OUT(32+1+11*n) (Or CIC1_OUT(32+1+11*(n-4)) ,当在CORE1上运行时,n=0,即对应uiCIC_out_num= 33。

   if(C6670_EVM==gDSP_board_type

       ||DUAL_NYQUIST_EVM==gDSP_board_type

       ||TCI6614_EVM==gDSP_board_type)

    {  

       uiCIC_out_num= 64;//CIC out 64 is INTC input 22

    }

   elseif(C6678_EVM==gDSP_board_type)

    {  

       uiCIC_out_num= 33;//in C6678, CIC out 33 is also INTC input 22

    }

   else

    {

      puts("Unknown DSP board type!");

      return;

    }

    第二步,选定当前使用哪一个CIC模块,根据手册描述,CORE0-3均使用CIC0。

   if(DNUM<4) //for core 0, 1, 2, 3

       CIC_Regs= gpCIC0_regs;

   else

       CIC_Regs= gpCIC1_regs;

     第三步,绑定系统事件与CIC0输出通道之间的映射关系,这里串口接收事件CSL_INTC0_URXEVT对应的CIC0输出通道为34,即uiCIC_out_num+1,手册描述为CIC0_OUT(32+2+11*n) Or CIC1_OUT(32+2+11*(n-4)) 。

    KeyStone_CIC_event_map(CIC_Regs, CSL_INTC0_UARTINT, uiCIC_out_num);

    KeyStone_CIC_event_map(CIC_Regs, CSL_INTC0_URXEVT, uiCIC_out_num+1);

    KeyStone_CIC_event_map(CIC_Regs, CSL_INTC0_CPU_3_2_EDMACC_GINT, uiCIC_out_num+2);

    第四步,绑定CIC0输出通道与CORE0内INTC控制器中断向量之间的映射关系,这里CIC0输出通道34对应CORE0内核中断向量中的CSL_CGEM_INTMUX1_INTSEL5_SHIFT

    gpCGEM_regs->INTMUX1 =

    (CSL_GEM_INTC0_OUT_33_PLUS_11_MUL_N_OR_INTC0_OUT_33_PLUS_11_MUL_N_MINUS_4<<CSL_CGEM_INTMUX1_INTSEL4_SHIFT)|\

    (CSL_GEM_INTC0_OUT_34_PLUS_11_MUL_N_OR_INTC0_OUT_34_PLUS_11_MUL_N_MINUS_4<<CSL_CGEM_INTMUX1_INTSEL5_SHIFT)|\

    (CSL_GEM_INTC0_OUT_35_PLUS_11_MUL_N_OR_INTC0_OUT_35_PLUS_11_MUL_N_MINUS_4<<CSL_CGEM_INTMUX1_INTSEL6_SHIFT);

     第五步,最后在中断向量表中将串口接收中断进行注册,文件UART_vectors.asm。

vectors:

    VEC_RESET Nested_Exception_service_routine            ;Nested exception 

    VEC_ENTRY NMI_ISR  ;NMI/Exception

    VEC_DUMMY              ;RSVD

    VEC_DUMMY              ;RSVD

    VEC_ENTRY  KeyStone_UART_Error_ISR      ;interrupt 4

    VEC_ENTRY  KeyStone_UART_Rx_ISR       ;interrupt 5

    VEC_ENTRY  KeyStone_UART_EDMA_ISR ;interrupt 6

    VEC_DUMMY              ;interrupt 7

    VEC_DUMMY              ;interrupt 8

    VEC_DUMMY              ;interrupt 9

    VEC_DUMMY              ;interrupt 10

    VEC_DUMMY              ;interrupt 11

    VEC_DUMMY              ;interrupt 12

    VEC_DUMMY              ;interrupt 13

    VEC_DUMMY              ;interrupt 14

    VEC_DUMMY              ;interrupt 15

   .end

     上述程序通过仿真器在CORE0上可正常运行,触发串口接收中断。现在想在CORE1上实现串口接收中断,对上述五个配置步骤做了以下调整,但是仿真器下载运行时,串口中断无反应,请问各位专家是有哪些理解错误或遗漏的地方?

     第一步:uiCIC_out_num= 44;,这是按n=1时,CIC0_OUT(32+1+11*n) (Or CIC1_OUT(32+1+11* (n-4))计算得到的。

     第二步,无修改,同样使用CIC0。

     第三步,代码无修改,但串口接收事件CSL_INTC0_URXEVT对应的CIC0输出通道为45,这是按n=1时,CIC0_OUT(32+1+11*n) (Or CIC1_OUT(32+1+11* (n-4))计算得到的。

     第四步,代码无修改,这里CIC0输出通道45对应CORE1内核中断向量中的CSL_CGEM_INTMUX1_ INTSEL5_SHIFT。

     第五步,代码无需修改。

CMD文件如下:

MEMORY

{

    /* Local L2, 0.5~1MB*/

   VECTORS:  o = 0x00800000 l = 0x00000200   /*set memory protection attribitue as execution only*/

   LL2_CODE:o = 0x00800200 l = 0x0000FE00   /*set memory protection attribitue as execution only*/

   LL2_R_DATA:   o = 0x00810000 l = 0x00008000   /*set memory protection attribitue as read only*/

   LL2_RW_DATA:  o = 0x00818000 l = 0x00048000   /*set memory protection attribitue as read/write*/

 

    /* Shared L2 2~4MB*/

   SL2:      o = 0x0C000000 l = 0x00180000  

   SL2_RW_DATA:  o = 0x18000000 l = 0x00200000   /*remapped SL2, set memory protection attribitue as read/write*/

   

    /* External DDR3, upto 2GB per core */

   DDR3_CODE:o = 0x80000000 l = 0x01000000   /*set memory protection attribitue as execution only*/

   DDR3_R_DATA:  o = 0x81000000 l = 0x01000000      /*set memory protection attribitue as read only*/

   DDR3_RW_DATA:o = 0x82000000 l = 0x06000000   /*set memory protection attribitue as read/write*/

}

Thomas Yang1:

先不通过CIC,直接GPIO event能不能路由到CORE1的primary event中试试呢?

countryhotel:

回复 Thomas Yang1:

问题已经解决,谢谢,

user4670459:

回复 countryhotel:

您好,我遇到了同样的问题,请问您是怎么解决的?望不吝赐教。

赞(0)
未经允许不得转载:TI中文支持网 » C6678 CORE1串口接收中断配置
分享到: 更多 (0)