#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"
void scib_init(void);
void scib_fifo_init(void);
void scib_xmit(int a);
void scib_msg(char *msg);
//void scib_dataSend(uint16_t* array);
void main(void)
{
char *msg; //int array[10]={0,1,2,3,0,5,6,7,8,9};
InitSysCtrl();
InitScibGpio();
InitXintf16Gpio();
DINT;
InitPieCtrl();
IER = 0x0000;//Disable CPU interrupts
IFR = 0x0000;//clear all CPU interrupt flags
InitPieVectTable();
//scib_dataSend();
scib_fifo_init(); // Initialize the SCI FIFO
scib_init(); // Initalize SCI for echoback
for(;;)
{
msg = "123";
scib_msg(msg);
DELAY_US(1000);
}
}
/*SCI寄存器初始函数*/
void scib_init()
{
ScibRegs.SCICCR.all =0x0007; //设置数据为8位 1 stop bit, No loopback
ScibRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
ScibRegs.SCICTL2.all =0x0003;
ScibRegs.SCICTL2.bit.TXINTENA = 1;//TX中断使能
ScibRegs.SCICTL2.bit.RXBKINTENA =1;//RX中断
ScibRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
ScibRegs.SCILBAUD =0x00E7;
ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}
/*TX 一个字符*/
void scib_xmit(int a)
{
while (ScibRegs.SCICTL2.bit.TXRDY == 0) {}//TXRDY==0:TX数据寄存器已满;
ScibRegs.SCITXBUF=a; //TXRDY==1:TX数据寄存器准备接收下一个数据
}
void scib_msg(char * msg)
{
int i;
i = 0;
while(msg[i] != '\0')
{
scib_xmit(msg[i]);
i++;
}
}
void scib_fifo_init()
{
ScibRegs.SCIFFTX.all=0x8000;
}
SciaRegs.SCICCR.all = 0x0007
SciaRegs.SCISTL2:
SCIHBAUD:波特率H;
SCILBAUD:波特率L;
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
// Prototype statements for functions found within this file.
void scib_echoback_init(void);
void scib_fifo_init(void);
void scib_xmit(int a);
void scib_msg(char *msg);
// Global counts used in this example
Uint16 LoopCount;
Uint16 ErrorCount;
void main(void)
{
Uint16 ReceivedChar;
char *msg;
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2833x_SysCtrl.c file.
InitSysCtrl();
// Step 2. Initalize GPIO:
// For this example, only init the pins for the SCI-A port.
// This function is found in the DSP2833x_Sci.c file.
InitScibGpio();
InitXintf16Gpio();
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;
// Initialize PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP2833x_PieCtrl.c file.
InitPieCtrl();
IER = 0x0000;//Disable CPU interrupts
IFR = 0x0000;//clear all CPU interrupt flags
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example. This is useful for debug purposes.
// The shell ISR routines are found in DSP2833x_DefaultIsr.c.
// This function is found in DSP2833x_PieVect.c.
InitPieVectTable();
// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
// Step 5. User specific code:
LoopCount = 0;
ErrorCount = 0;
scib_fifo_init(); // Initialize the SCI FIFO
scib_echoback_init(); // Initalize SCI for echoback
msg = "\r\n\n\nHello Yan Xu!\0";
scib_msg(msg);
msg = "\r\nYou will enter a character, and the DSP will echo it back! \n\0";
scib_msg(msg);
for(;;)
{
msg = "\r\nEnter a character: \0";
scib_msg(msg);
// Wait for inc character
while(ScibRegs.SCIRXST.bit.RXRDY !=1) { } // wait for XRDY =1 for empty state
// Get character
ReceivedChar = ScibRegs.SCIRXBUF.all;
// Echo character back
msg = " You sent: \0";
scib_msg(msg);
scib_xmit(ReceivedChar);
LoopCount++;
}
}
// Test 1,SCIA DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity
void scib_echoback_init()
{
// Note: Clocks were turned on to the SCIA peripheral
// in the InitSysCtrl() function
ScibRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
ScibRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
ScibRegs.SCICTL2.all =0x0003;
ScibRegs.SCICTL2.bit.TXINTENA = 1;//TX中断使能
ScibRegs.SCICTL2.bit.RXBKINTENA =1;//RX中断
#if (CPU_FRQ_150MHZ)
ScibRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
ScibRegs.SCILBAUD =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)
ScibRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz.
ScibRegs.SCILBAUD =0x0044;
#endif
ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}
// Transmit a character from the SCI
void scib_xmit(int a)
{
while (ScibRegs.SCICTL2.bit.TXRDY == 0) {}//TXRDY==0:TX数据寄存器已满;
ScibRegs.SCITXBUF=a; //TXRDY==1:TX数据寄存器准备接收下一个数据
}
void scib_msg(char * msg)
{
int i;
i = 0;
while(msg[i] != '\0')
{
scib_xmit(msg[i]);
i++;
}
}
// Initalize the SCI FIFO
void scib_fifo_init()
{
ScibRegs.SCIFFTX.all=0x8000;
}