📄 main.c
字号:
/* main.c: Simple eSCI program */
/* Rev 0.1 Sept 30, 2004 S.Mihalik, Copyright Freescale, 2004. All Rights Reserved */
/* Rev 1.0 July 14 2005 SM-Cleared TDRE, RDRF flags as required in MPC5554 RevA & on*/
/* Rev 1.1 July 19 2007 SM - Modified for MPC551x, changed sysclk (50 MHz) & SBR, */
/* cleared RDRF before reading data register */
/* Rev 1.2 Aug 08 2007 SM - Changed sysclk to 64 MHz */
/* Rev 1.3 Jun 04 2008 SM - initSysclk changed for MPC5633M support */
#include "mpc563m.h" /* Use proper include file such as mpc5510.h or mpc5554.h */
const uint8_t TransData[] = {"Hello World!\n\r"}; /* Transmit string & CR*/
uint8_t RecData; /* Received byte from eSCI */
void initSysclk (void) {
/* MPC551x: Use the next 6 lines */
/* CRP.CLKSRC.B.XOSCEN = 1; */ /* Enable external oscillator */
/* FMPLL.ESYNCR2.R = 0x00000006; */ /* Set ERFD to initial value of 6 */
/* FMPLL.ESYNCR1.R = 0xF0000020; */ /* Set CLKCFG=PLL, EPREDIV=0, EMFD=0x20*/
/* while (FMPLL.SYNSR.B.LOCK != 1) {};*/ /* Wait for PLL to LOCK */
/* FMPLL.ESYNCR2.R = 0x00000005; */ /* Set ERFD to final value for 64 MHz sysclk */
/* SIU.SYSCLK.B.SYSCLKSEL = 2; */ /* Select PLL for sysclk */
/* MPC563x: Use the next line */
FMPLL.ESYNCR1.B.CLKCFG = 0X7; /* Change clk to PLL normal mode from crystal */
/* MPC555x including MPC563x: use the next 3 lines for either 8 or 40 MHz crystal */
FMPLL.SYNCR.R = 0x16080000; /* 8 MHz xtal: 0x16080000; 40MHz: 0x46100000 */
while (FMPLL.SYNSR.B.LOCK != 1) {}; /* Wait for FMPLL to LOCK */
FMPLL.SYNCR.R = 0x16000000; /* 8 MHz xtal: 0x16000000; 40MHz: 0x46080000 */
}
void initESCI_A (void) {
ESCI_A.CR2.R = 0x2000; /* Module is enabled (default setting ) */
ESCI_A.CR1.R = 0x01A1000C; /* 9600 baud, 8 bits, no parity, Tx & Rx enabled */
/* Use the following two lines for MPC551x */
/* SIU.PCR[54].R = 0x400; */ /* Configure pad for primary func: TxDA */
/* SIU.PCR[55].R = 0x400; */ /* Configure pad for primary func: RxDA */
/* Use the following two lines for MPC555x */
SIU.PCR[89].R = 0x400; /* Configure pad for primary func: TxDA */
SIU.PCR[90].R = 0x400; /* Configure pad for primary func: RxDA */
}
void TransmitData (void) {
uint8_t j; /* Dummy variable */
for (j=0; j< sizeof (TransData); j++) { /* Loop for character string */
while (ESCI_A.SR.B.TDRE == 0) {} /* Wait for transmit data reg empty = 1 */
ESCI_A.SR.R = 0x80000000; /* Clear TDRE flag */
ESCI_A.DR.B.D = TransData[j]; /* Transmit 8 bits Data */
}
}
void ReceiveData (void) {
while (ESCI_A.SR.B.RDRF == 0) {} /* Wait for receive data reg full = 1 */
ESCI_A.SR.R = 0x20000000; /* Clear RDRF flag */
RecData = ESCI_A.DR.B.D; /* Read byte of Data*/
while (ESCI_A.SR.B.TDRE == 0) {} /* Wait for transmit data reg empty = 1 */
ESCI_A.SR.R = 0x80000000; /* Clear TDRE flag */
ESCI_A.DR.B.D = RecData; /* Echo back byte of Data read */
}
void main(void) {
initSysclk(); /* Set sysclk = 50MHz running from PLL */
initESCI_A(); /* Enable Tx/Rx for 9600 baud, 8 bits, no parity */
TransmitData(); /* Transmit string of characters on eSCI A */
ReceiveData(); /* Receive and echo character on eSCI A */
while (1) {} /* Wait forever */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -