⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 mpc55**系列芯片的例程 包括SCI,SPI,TIMER,FIT,EDMA等几乎所有功能的实现
💻 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 + -