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.

motorware工程中添加SCI接口

Expert 1119 points
Other Parts Discussed in Thread: MOTORWARE, DRV8301

目前我用motorware中的lab_3a工程,想添加一个SCI端口做通讯用。为此在论坛学习了一下,也在一个其他demo工程中成功的使用SCI进行了收发操作,然而,在lab_3a工程中添加,却遇到了极大困难。我的操作如下:

1、在工程中添加了sci.c(原工程没有)

2,工程main函数中,初始化相关操作:

     2.1  在HAL_init(&hal,sizeof(hal))中添加   obj->sciAHandle  =  SCI_init((void *)SCIA_BASE_ADDR,sizeof(SCI_Obj)); 

     2.2  在HAL_setParams(halHandle,&gUserParams) 中添加   HAL_setupSciA(handle),在其中初始化SCI,始能收发及中断,配置SCI

     2.3 在上面的HAL_setParams(halHandle,&gUserParams) 中,修改 HAL_setupPeripheralClks(handle) 和HAL_setupGpios(handle),使能SCI时钟和配置IO;

     2.4 在PIE中开启第9组IER_int1\int2始能(这点有点疑惑)

     2.5 在 HAL_initIntVectorTable(halHandle)中添加  pie->SCITXINTA = &sciaTxFifoIsr,指向我的服务程序;接收中断同样处理;

3  上述操作做完后,主函数死循环前调用如下函数 SCI_write(sciAHandle,0x00a7);

     0xa7是我随便写的,就是发送个A7;该函数也很简单,就是对发送数据寄存器赋值sci->SCITXBUF = data;

    然而,我发现,我的数据,压根就没入SCITXBUF ,当然,后面的发送中断也就无从谈起。接收也一样。   等于是SCI现在完全不能使用。

几点说明:

1、硬件环境为DRV8301_69M_KIT套装,不怀疑硬件,因为换一个串口例程的工程,没问题;

2、仿真中观测各寄存器,GPIO、PCLKCR0等与之相关的没发现啥问题;PIEEIR9感觉有点疑惑,写1了,但是程序运行后被清0了?

3、SCIA也按照我的初始化内容配置了,不过,SCITXBUF始终为0,写不进去!!

4,串口例程学了,现在暂时没发现从过程来说有啥遗漏;不想移植的事,这俩工程在结构体写法等差异太大,而且调用的路径挺深,几乎没有复制粘贴拿来用的可能性

请问,我现在如何操作呢?

                                           
                                         

     

  • 没有人回答吗
  • 找到问题了,开了无数标准位,但是还是落下一个:
    CPU_enableInt(obj->cpuHandle,CPU_IntNumber_9);
    加上上述语句,可以了
    希望各位以我为鉴,仔细再仔细
  • 额,抱歉回复晚了,非常感谢你的反馈,描述的很详细,应该对以后有此需求的工程师会帮助很大。
  • Shan 说:
    CPU_enableInt(obj->cpuHandle,CPU_IntNumber_9);

    你好,请问这句开标志位的语句应该加在什么地方?

  • 这就是一个使能中断语句,理论上加在哪里都都行呀,比如初始化中断向量表后。

    那个工程,我就加在HAL_enableAdcInts(halHandle)函数里了,省事儿,不过不很规范。

    也可以创建个函数,比如HAL_enableSciInts(HAL_Handle handle),里面添加三个语句:使能PIE中断,使能CPU中断,使能SCI中断。

    以上我自己的理解,仅供参考