请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320C5505 Thread 中讨论的其他器件:SYSBIOS
工具/软件:Code Composer Studio
尊敬的所有人:
大家好、我使用了 C5505-开发板 eZdsp-USB、现在调试 SPI 遇到了以下问题:
1、单独调试 SPI、时钟波形正常。
2、加上 UART 串行端口程序、SPI 工作正常、但 UART 没有数据输出。
3、移除 SPI、单独 UART、UART 正常工作。
我不知道配置的错误位置。 当 UART 和 SPI 协同工作时、UART 不工作。
void spirom_init()
{
/*启用 SPI */
SYS_EXBUSSEL =(SYS_EXBUSSEL 和0x0fff)| 0x1000;
SYS_PRCNTR = 0x04;
SYS_PRCNTRLR = 0x0080;
/* SPI 时钟控制*/
SPI_SPICC2 = 0x0000;// SPI 时钟被禁用
SPI_SPICC1 = 0x00b0;// 12MHz 输入时钟除以120
SPI_SPIDC1 = 0x0000;// SPI0低空闲时钟、低电平有效 CS、在上升时钟上移出、无时钟延迟
SPI_SPIDC2 = 0x0000;
SPI_SPICC2 = 0x8000;//启用 SPI 时钟
}
void UART_txIsr ()
{
if (i_timeeee < 7)
{
i_timeeeeeeeeee++;
UART_WRITE (hUart、&Rx_MCU[I_TIMEE]、I_TIMEee、1000);
//USBSTK5505_waitusec( 100);
}
UART_eventEnable (hUart、CSL_UART_XMIOR_REG_EMPT_INTERRUPT);
//
}
CSL_UartSetup mySetup =
{
//输入时钟频率,单位为 MHz */
98304000、
/*波特率*/
9600、
/*字长8 */
CSL_UART_WORD8、
/*生成1个停止位*
1、
/*禁用奇偶校验*/
CSL_UART_DISABLE_奇 偶校验,
/*禁用 FIFO */
CSL_UART_FIFO_DISABLE、
/*启用触发器14 FIFO *//
CSL_UART_FIFO_DMA1_DISABLE_TRIG14,
//回送启用*/
CSL_UART_NO_LOOP回 送,
/**无自动流控制*/CSL_UART_NO_AFE
,
//无 RTS
*/ CSL_UART_NOT_INT_UINT16,
//
UART_INIT (uartObj、CSL_UART_INST_0、UART_polled);
hUart =(CSL_UartHandle)(uartObj);
/*使用设置结构配置 UART 寄存器*/
UART_setup (hUart、&mySetup);
/*循环计数器和错误标志*/
状态= UART_INIT (&uartObj、CSL_UART_INST_0、UART_INTERRUPT);
if (CSL_SOK!=状态)
{
printf ("UART_init 失败错误代码%d\n"、status);
返回状态;
}
/**已创建句柄*/
hUart =(CSL_UartHandle)(uartObj);
/*使用设置结构配置 UART 寄存器*/
状态= UART_setup (hUart、&mySetup);
if (CSL_SOK!=状态)
{
printf ("UART_setup 失败错误代码%d\n"、status);
返回状态;
}
isrAddr.rbiAddr = UART_rxIsr;
isrAddr.tbeiAddr = UART_txIsr;
isrAddr.ctoi = UART_ctoIsr;
isrAddr.lsiAddr = UART_lsiIsr;
IRQ_CLEAR (UART_EVENT);
IRQ_setVecs ((uint32)(&VECSTART));
/*配置中断*/
IRQ_plug (UART_EVENT、&UART_INTERDispatch);
/*启用中断*/
IRQ_ENABLE (UART_EVENT);
IRQ_globalEnable();
UART_setCallback (hUart、isrAddr);
状态= UART_eventEnable (hUart、CSL_UART_XMIOR_REG_EMPT_INTERRUPT);
状态= UART_eventEnable (hUart、CSL_UART_RECVOR_REG_DATA_INTERRUPT);
STATUS = UART_eventEnable (hUart、CSL_UART_RECVOR_LINE_STATUS_INTERRUPT);
返回0;
}
中断空 UART_INTERDispatch (void)
{
uint16 EventID = 0;
IRQ_DISABLE (UART_EVENT);
/*获取导致中断的事件 ID */
EventID = UART_getEventId (hUart);
if (((void (*)(void))(hUart->UART_isrDispatchTable[EventID])))
{
(((void (*)(void))(hUart->UART_isrDispatchTable[EventID]));
}
IRQ_ENABLE (UART_EVENT);
返回;
}