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

C6678基于processor_sdk_rtos_c667x_6_00_00_07开发串口问题

问题1、6678使用sdk中的驱动部分(csl、drv、osal等)必须上操作系统么?

详细描述:安装好processor_sdk_rtos_c667x_6_00_00_07后里面带有pdk_c667x_2_0_14,看了里面的gpio、uart的驱动,都有相关的osal层,这些驱动必须基于SYSBIOS开发么?

问题2、uart驱动的使用如何与sysbios的中断配置对应?

详细描述:(1)例如在uart中断中进行收取数据,按照ti.sysbios.family.c66.tci66xx.CpIntc中的说明需要对串口中断进行映射,代码如下所示,如此,便可在HWI中断中将数据自行存放在FIFO中供后期处理;(2)而在uart驱动的UART.h文件中提供的UART_read函数也提供了非阻塞读数且还提供了readCallback可设置回调函数,在测试过程中发现这些都是在task线程中运行的,包括回调函数。那么这个驱动如何跟中断联系起来?

  Int eventId;Hwi_Params params;Error_Block eb;// Initialize the error blockError_init(&eb);// Map system interrupt 148 to host interrupt 8 on Intc 0CpIntc_mapSysIntToHostInt(0, 148, 8);// Plug the function and argument for System interrupt 148 then enable itCpIntc_dispatchPlug(148, &myEvent148Fxn, 148, TRUE);// Enable Host interrupt 8 on Intc 0CpIntc_enableHostInt(0, 8);// Get the eventId associated with Host interrupt 8eventId = CpIntc_getEventId(8);// Initialize the Hwi parametersHwi_Params_init(&params);// Set the eventId associated with the Host Interruptparams.eventId = eventId;// The arg must be set to the Host interruptparams.arg = 8;// Enable the interrupt vectorparams.enableInt = TRUE;// Create the Hwi on interrupt 7 then specify 'CpIntc_dispatch'// as the function.Hwi_create(7, &CpIntc_dispatch, &params, &eb);

Nancy Wang:

cfg配置界面会有相关的参数配置。

lingshan lan:

回复 Nancy Wang:

cfg静态配置和动态配置都可以,问题是pdk软件包中的drv下的uart驱动api使用了后,不管用cfg静态配置hwi还是程序中配置hwi,都无法绑定!
在drv的uart驱动中比如UART_open_v0这个函数里有操作osal中关于hwi的相关部分!
那么TI在发布sdk软件包中对于串口如果使用了drv的方式初始化串口就不能在用hwi来配置了么?

Nancy Wang:

回复 lingshan lan:

应该不会有影响的,请问你是在配置了HWI之后无法进入中断吗?可否贴出相关代码看一下。
或者利用ROV看一下HWI的运行状态。
processors.wiki.ti.com/…/Runtime_Object_View_(ROV)

lingshan lan:

回复 Nancy Wang:

(1)通过drv的uart驱动初始化串口后,如果在通过sysbios的Hwi_creat创建HWI无法创建,如果不使用drv的uart驱动初始化串口,可以正常创建HWI。
(2)drv设定读为UART_MODE_CALLBACK,在task中调用读取函数后可以正常跳转到回调函数中,但是ROV中并没有HWI线程,但是通过UART_socGetInitCfg(0,&hw_params)可以获取硬件抽象层的配置,可以看到中断时使能了的,难道drv没有用中断???
通过drv的uart驱动初始化:
void uart_int_test_fxn(UART_Handle handle,void *buf,size_t count)
{System_printf("Drv Uart callback");
}
Board_STATUS Board_uartInit()
{Board_STATUS ret;UART_Params params;UART_HwAttrs hw_params;
UART_Params_Init(&params);params.readMode = UART_MODE_CALLBACK;params.readCallback = uart_int_test_fxn;params.baudRate = 115200;params.readReturnMode = UART_RETURN_FULL;params.readEcho = UART_ECH_OFF;Board_obj.uartHandle = UART_open(0,&params);if(Board_obj.uartHandle == NULL){ret = BOARD_UART_OPEN_FAIL;}else{ret = BOARD_SOK;}
}

通过SYSBOIS的HWI中断:
void myEvent148Fxn(UArg arg)
{System_printf("Hwi int");
}
void thread_init_hwi()
{Hwi_Handle hwi_Uart;Error_Block eb;Int eventId;Hwi_Params params;
Error_init(&eb);CpIntc_mapSysIntToHostInt(0,148,8);CpIntc_dispatchPlug(148,&myEvent148Fxn,148,TRUE);CpIntc_enableHostInt(0,8);eventId = CpIntc_getEventId(8);Hwi_Params_init(&params);params.eventId = eventId;params.arg = 8;params.enableInt = Ture;hwi_Uart = Hwi_creat(6,&CpIntc_dispatch,&params,&eb);if(hwi_Uart == NULL){System_printf("Hwi_Uart create failed");}
}

Nancy Wang:

回复 lingshan lan:

请问你的要创建的HWI具体是什么作用?如果不是给UART中断注册就直接利用BIOS HWi 模块创建。UART_open 中已经创建了HWI。
UART_open ->UART_osalRegisterInterrupt ->Osal_RegisterInterrupt ->HwiP_create ->给驱动注册ISR

lingshan lan:

回复 Nancy Wang:

是的,在用starware开发c6748的串口时是通过bios的hwi模块创建的,在hwi中断线程收数据,所以在用这个6678的pdk来这样操作就产生了这样的疑问。

那么UART_open注册了ISR,应该也是属于hwi线程吧,为啥在rov中就看不到对应的hwi呢?

lingshan lan:

回复 Nancy Wang:

是的,在用starware开发c6748是通过bios的hwi模块创建的,所以在用这个6678的pdk来这样操作就产生了这样的疑问。
那么UART_open注册了ISR,应该也是属于hwi线程吧,为啥在rov中就看不到对应的hwi呢?

赞(0)
未经允许不得转载:TI中文支持网 » C6678基于processor_sdk_rtos_c667x_6_00_00_07开发串口问题
分享到: 更多 (0)