๐ SCI ๋ ์ง๋ ฌํต์ ์ ์ง๋ ฌํต์ ์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก๋ UART(Universal Asynchronous Receiver/Transmitter) ๋ฒ์ฉ ๋น๋๊ธฐ ํต์ ๊ธฐ๋ก ์๋ ค์ ธ ์๋ค. ์ฌ๋ฌ๊ฐ์ง ์ง๋ ฌ ํต์ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, RS-232C๋ฅผ ์ง์ํ๋ฏ๋ก PC์์ ์ธํฐํ์ด์ค์ ๋ง์ด ์ฌ์ฉ๋๋ค. ๋ ธ์ด์ฆ์ ๊ฐํ๋ฉฐ, ์ฅ๊ฑฐ๋ฆฌ ํต์ ์ด ๊ฐ๋ฅํ๋ค. TMS320C/F281X DSP๋ฅผ 150MHz๋ก ๊ตฌ๋ํ ๋, ์ง์ ๊ฐ๋ฅํ ์ต๊ณ ์๋๋ 9.37Mbps์ด๋ค. ๊ฐ๋จํ ์๋์ ๊ฐ์ ๊ตฌ์กฐ์ด๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด SCI์ ๊ฒฝ์ฐ Idle-line ๋ชจ๋์ Address bit ๋ชจ๋ ๋๊ฐ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์๋ค. ์ด์ค Idle-line ๋ชจ๋๋ RS-232C์ ๊ฑฐ์ ๋์ผํ๋ค. ์ค์ ๋ก RS-232๋ฅผ ์ฌ์ฉํ๋ PC์ ์๋ฆฌ์ผ ํฌํธ์์ ํต์ ์ SCI์ Idle-line ๋ชจ๋๋ฅผ ์ฌ์ฉํด์ผ ๊ฐ๋ฅํ๋ค.
Address-bit ๋ชจ๋์ ๊ฒฝ์ฐ๋ ๋๋ถ๋ถ ๋น์ทํ์ง๋ง ํ ๊ฐ์ง ๋ค๋ฅธ ์ ์ด ์๋ค. ๋ฐ๋ก Address bit์ ์กด์ฌ์ด๋ค. ์ด Address-bit์ ์กด์ฌ๋ก ์ธํด์ SCI๋ ๋ฉํฐ๋๋กญ(multi-drop: ํ๋์ ์ฅ์น์ ์ฌ๋ฌ ์ฅ์น ์ฐ๊ฒฐ)์ด ๊ฐ๋ฅํด์ง๋ค. RS-232C์ ๊ฒฝ์ฐ๋ ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. Idle-line ๋ชจ๋๋ ๋ฉํฐ๋๋กญ์ด ๊ฐ๋ฅํ๊ธด ํ์ง๋ง address-bit๋ชจ๋์ ๋นํ์ฌ ๋ถ๋ฆฌํ ๋ฉด์ด ์๋ค.
SOURCE TR28335_Sci.h
/*=======================================================
*
* FILE : TR28335_Sci.h .2017
* TITLE : TR28335 SCI (Serial Communications Interface)
*
*=======================================================*/
#ifndef __TR28335_SCI_H__
#define __TR28335_SCI_H__
#ifdef _cplusplus
extern "C" {
#endif
#include <main.h>
void InitSciA(void);
void SciLpb(void);
#ifdef _cplusplus
}
#endif /* extern "C" */
#endif /* __TR28335_SCI_H__ */
SOURCE TR28335_Sci.c
/*=======================================================
*
* FILE : TR28335_Sci.c .2017
* TITLE : TR28335 SCI (Serial Communications Interface)
*
*=======================================================*/
#include <TR28335_Sci.h>
Uint16 gSciTxBuf[16];
Uint16 gSciRxBuf[16];
Uint16 gSciRxFlag;
static interrupt void scia_txFifo_isr(void);
static interrupt void scia_rxFifo_isr(void);
/*=======================================
*
* Name : InitSciA
* Type : Fucntion
* Description : SCI Initialization
*
=========================================*/
void InitSciA(void)
{
Uint32 i;
/* Vector Remapping */
EALLOW;
PieVectTable.SCITXINTA = &scia_txFifo_isr;
PieVectTable.SCIRXINTA = &scia_rxFifo_isr;
EDIS;
/* SCI Setting */
InitSciaGpio();
/* SCI ์ฃผ์ ์ค์ */
SciaRegs.SCICTL1.bit.SWRESET = 0; /* SCI ์ํํธ์จ์ด ๋ฆฌ์
*/
SciaRegs.SCICCR.bit.SCICHAR = 7; /* SCI ์ก์์ Charcter-length ์ค์ : 8bit */
SciaRegs.SCICCR.bit.LOOPBKENA = 0; /* SCI ๋ฃจํ๋ฐฑ ํ
์คํธ ๋ชจ๋ Enable */
SciaRegs.SCICTL1.bit.RXENA = 1; /* SCI ์์ ๊ธฐ๋ฅ Enable */
SciaRegs.SCICTL1.bit.TXENA = 1; /* SCI ์ก์ ๊ธฐ๋ฅ Enable */
SciaRegs.SCIHBAUD = 0x00; /* SCI Baudrate ์ค์ */
SciaRegs.SCILBAUD = 0x79; /* 38400bps */
SciaRegs.SCIPRI.bit.FREE = 1; /* SCI ์๋ฎฌ๋ ์ด์
ํ๋ฆฌ ๋ชจ๋ */
/* SCI ์ก์ FIFO ์ค์ */
SciaRegs.SCIFFTX.bit.SCIFFENA = 1; /* SCI FIFO ์ฌ์ฉ ์ค์ Enable */
SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1; /* SCI ์ก์ FIFO ์ธํฐ๋ฝํธ ํ๋๊ทธ ํด๋ฆฌ์ด */
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1; /* SCI ์ก์ FIFO RE-enable */
SciaRegs.SCIFFTX.bit.TXFFIENA = 1; /* SCI ์ก์ FIFO ์ธํฐ๋ฝํธ Enable */
SciaRegs.SCIFFTX.bit.TXFFIL = 0; /* SCI ์ก์ FIFO ์ธํฐ๋ฝํธ ๋ ๋ฒจ ์ค์ */
/* SCI ์์ FIFO ์ค์ */
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; /* SCI ์์ FIFO ์ธํฐ๋ฝํธ ํ๋๊ทธ ํด๋ฆฌ์ด */
SciaRegs.SCIFFRX.bit.RXFIFORESET = 1; /* SCI ์์ FIFO RE-Enable */
SciaRegs.SCIFFRX.bit.RXFFIENA = 1; /* SCI ์์ FIFO ์ธํฐ๋ฝํธ Enable */
SciaRegs.SCIFFRX.bit.RXFFIL = 16; /* SCI ์์ FIFO ์ธํฐ๋ฝํธ ๋ ๋ฒจ ์ค์ */
SciaRegs.SCICTL1.bit.SWRESET = 1; /* SCI ์ํํธ์จ์ด ๋ฆฌ์
ํด์ */
PieCtrlRegs.PIEIER9.bit.INTx2 = 1; /* PIE ์ธํฐ๋ฝํธ (SCITXINTA) : Enable */
PieCtrlRegs.PIEIER9.bit.INTx1 = 1; /* PIE ์ธํฐ๋ฝํธ (SCIRXINTA) : Enable */
IER |= M_INT9;
for (i = 0; i < 16; i++)
gSciTxBuf[i] = i;
for (i = 0; i < 16; i++)
gSciRxBuf[i] = 0;
gSciRxFlag = 0;
return ;
}
/*====================================================
*
* Name : scia_txFifo_isr
* Type : Interrupt
* Description : SCI Transmit Interrupt Service Routine
*
======================================================*/
static interrupt void scia_txFifo_isr(void)
{
Uint32 i;
for (i = 0; i < 16; i++)
SciaRegs.SCITXBUF = gSciTxBuf[i] & 0x00FF;
SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1; /* Clear Interrupt flag */
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; /* Acknowledge interrupt to PIE */
return ;
}
/*====================================================
*
* Name : scia_rxFifo_isr
* Type : Interrupt
* Description : SCI Receive Interrupt Service Routine
*
======================================================*/
static interrupt void scia_rxFifo_isr(void)
{
Uint32 i;
for (i = 0; i < 16; i++)
gSciRxBuf[i] = SciaRegs.SCIRXBUF.bit.RXDT;
gSciRxFlag = 1;
SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1; /* Clear Overflow flag */
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; /* Clear Interrupt flag */
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; /* Acknowledge interrupt to PIE */
return ;
}
/*=======================================
*
* Name : SciLpb
* Type : Fucntion
* Description : SCI Loop-Back Test
*
=========================================*/
void SciLpb(void)
{
Uint32 i;
if (gSciRxFlag == 1) {
for (i = 0; i < 16; i++)
gSciTxBuf[i]++; /* ๋ค์์ ์ก์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ */
SciaRegs.SCIFFTX.bit.TXFFIENA = 1; /* SCI ์ก์ FIFO ์ธํฐ๋ฝํธ Enable */
gSciRxFlag = 0;
}
return ;
}
์ฝ๋ ๋ถ์
๐ Step .1 SCITXINTA, SCIRXINTA : PIE Vector Table ์ Interrupt Service Routine ์ ๋ฑ๋กํ๋ค.
๐ Step .2 SCICTL1 - SWRESET : ๊ฐ์ด 0์ผ ๋, SCI๋ชจ๋์ ํ๋๊ทธ ๊ฐ๋ค์ ๋ชจ๋ ์ด๊ธฐํ ํ๋ค. ์ ์ก ์๋๋ ๊ธฐํ ๋ค๋ฅธ ์ค์ ์๋ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค. 0์ธ ๋์์๋ ํ๋๊ทธ ๊ฐ์ด ์ด๊ธฐํ ๋ ์ฑ๋ก ๋ณํ์ง ์์ผ๋ฉฐ, ๋ค์ 1์ด ๋์์ ๋ ํ๋๊ทธ ๊ฐ์ด SCI๋ชจ๋์ ์ํ์ ๋ฐ๋ผ ๋ณํํ๋ค.
๐ Step .3 SCICCR : ๋ชจ๋ ๋นํธ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
๐ Step .4 SCIHBAUD, SCILBAUD : ํต์ ์๋๋ ์ dataSheet์ SCI Asynchronous Baud ๊ณต์์ ์ํด ๊ฒฐ์ ๋๋ค. LSPCLK๋ PLL ํ๋ก์์ ๊ฒฐ์ ๋ ์ฃผ๋ณํ๋ก ๊ณต๊ธ ํด๋ญ์ด๋ค. ๋ง์ฝ ๊ณต์์ ๋ ์ง์คํฐ ๊ฐ(16๋นํธ)์ 0๊ฐ์ ๋ฃ์ผ๋ฉด 1์ ๋ฃ์ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ ๊ฐ์ ๊ฐ๋๋ค. ๋ ์ง์คํฐ ๊ฐ์ 0๋ถํฐ 65535๊น์ง ์ค์ ํ ์ ์๋ค.
๐ Step .5 SCICTL2 : ๋ชจ๋ ๋นํธ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
๐ Step .6 SCIRXST : ๋ชจ๋ ๋นํธ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
๐ Step .7 SCIRXBUF : ๋ชจ๋ ๋นํธ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
๐ Step .8 SCITXBUF : SCI ๋ชจ๋์์ ์ ์กํ ๋ฐ์ดํฐ๋ฅผ ์ง์ด ๋ฃ๋ ๋ ์ง์คํฐ์ด๋ค. ์ด ๋ ์ง์คํฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ด ๋ฃ์ผ๋ฉด, TXSHF๋ ์ง์คํฐ๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ๋ฐ์ผ๋ก ์ ์ก๋๋ค.
๐ Step .9 SCIFFTX : ๋ชจ๋ ๋นํธ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
๐ Step .10 SCIFFRX : ๋ชจ๋ ๋นํธ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
๐ Step .11 SCIFFCT : ๋ชจ๋ ๋นํธ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
ABD , ABD CLR, CDC : ์ด ์ธ ๊ฐ์ ๋นํธ๋ Auto-baud detect ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ ์ค์ ์ผ๋ก์จ, ์๋์ผ๋ก ์ธ๋ถ์์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ์ ์ ์ก์๋๋ฅผ ์ธก์ ํ๋ ๊ธฐ๋ฅ์ด๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๐ Step .12 SCRI : SCIํต์ ์ค์ ์๋ฎฌ๋ ์ดํฐ์ ์ํด ๋ธ๋ ์ดํฌ๊ฐ ๊ฑธ๋ ธ์ ๊ฒฝ์ฐ, ์ด๋ป๊ฒ ๋์ํ ๊ฒ์ธ๊ฐ๋ฅผ ๊ฒฐ์ ํ๋ค.
๊ฒฐ๊ณผ
TR28335 ๊ฐ๋ฐ KIT CPU Timer ์ธํฐ๋ฝํธ ์ฌ์ฉ (0) | 2017.06.23 |
---|---|
TR28335 ๊ฐ๋ฐ KIT GPIO LED ์ ์ด (0) | 2017.06.23 |
TR28335 ๊ฐ๋ฐ KIT CAN ํต์ (1) | 2017.06.21 |
F2833X General Purpose I/O (GPIO) ์ฌ์ฉ๋ฒ (0) | 2017.06.19 |
TR28335 Spec (0) | 2017.06.14 |