尊敬的TI工程师;
你好,我用的C5505-开发板ezdsp-usb,现在调试SPI遇到如下问题:
1、单独调试SPI,波形正常。
2、加上UART串口程序,SPI 正常工作,但是UART 没有数据输出。
3、去掉SPI,单独UART,UART正常工作。
不知道哪里配置错了,UART和SPI一起调试的时候不工作。
void spirom_init( )
{
/* Enable SPI */
SYS_EXBUSSEL = (SYS_EXBUSSEL & 0x0fff) | 0x1000;
SYS_PRCNTR = 0x04;
SYS_PRCNTRLR = 0x0080;
/* SPI Clock Control */
SPI_SPICC2 = 0x0000; // SPI clock disabled
SPI_SPICC1 = 0x00b0; // 12MHz input clock divided by 120
SPI_SPIDC1 = 0x0000; // SPI0 low idle clock, active low CS, shift out on rising clock, no clock delay
SPI_SPIDC2 = 0x0000;
SPI_SPICC2 = 0x8000; // SPI clock enabled
}
void uart_txIsr()
{
if( i_timeeee < 7 )
{
i_timeeee++;
UART_write( hUart,&Rx_mcu[i_timeeee],i_timeeee,1000);
//USBSTK5505_waitusec( 100 );
}
UART_eventEnable(hUart,CSL_UART_XMITOR_REG_EMPTY_INTERRUPT);
//
}
CSL_UartSetup mySetup =
{
/* Input clock freq in MHz */
98304000,
/* baud rate */
9600,
/* word length of 8 */
CSL_UART_WORD8,
/* To generate 1 stop bit */
1,
/* Disable the parity */
CSL_UART_DISABLE_PARITY,
/*disable fifo */
CSL_UART_FIFO_DISABLE,
/*enable trigger 14 fifo */
// CSL_UART_FIFO_DMA1_DISABLE_TRIG14,
/* Loop Back enable */
CSL_UART_NO_LOOPBACK,
/**No auto flow control*/
CSL_UART_NO_AFE ,
/** No RTS */
CSL_UART_NO_RTS ,
};
Uint16 uart_IntcSample(void)
{
UART_init(&uartObj,CSL_UART_INST_0,UART_POLLED);
hUart = (CSL_UartHandle)(&uartObj);
/* Configure UART registers using setup structure */
UART_setup(hUart,&mySetup);
/* Loop counter and error flag */
status = UART_init(&uartObj,CSL_UART_INST_0,UART_INTERRUPT);
if(CSL_SOK != status)
{
printf("UART_init failed error code %d\n",status);
return status;
}
/** Handle created*/
hUart = (CSL_UartHandle)(&uartObj);
/* Configure UART registers using setup structure */
status = UART_setup(hUart,&mySetup);
if(CSL_SOK != status)
{
printf("UART_setup failed error code %d\n",status);
return 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));
/* Configuring Interrupt */
IRQ_plug (UART_EVENT, &UART_intrDispatch);
/* Enabling Interrupt */
IRQ_enable(UART_EVENT);
IRQ_globalEnable();
UART_setCallback(hUart,&isrAddr);
status = UART_eventEnable(hUart, CSL_UART_XMITOR_REG_EMPTY_INTERRUPT);
status = UART_eventEnable(hUart, CSL_UART_RECVOR_REG_DATA_INTERRUPT);
status = UART_eventEnable(hUart, CSL_UART_RECVOR_LINE_STATUS_INTERRUPT);
return 0;
}
interrupt void UART_intrDispatch(void)
{
Uint16 eventId = 0;
IRQ_disable(UART_EVENT);
/* Get the event Id which caused interrupt */
eventId = UART_getEventId(hUart);
if (((void (*)(void))(hUart->UART_isrDispatchTable[eventId])))
{
((void (*)(void))(hUart->UART_isrDispatchTable[eventId]))();
}
IRQ_enable(UART_EVENT);
return;
}