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

📄 main.c

📁 mpc55**系列芯片的例程 包括SCI,SPI,TIMER,FIT,EDMA等几乎所有功能的实现
💻 C
字号:
/* main.c - Fixed Interval Timer interrupt example */
/* Rev 1.0 April 19, 2004 S.Mihalik, Copyright Freescale, 2004. All Rights Reserved */
/* Rev 1.1 Sept 1, 2004 SM - simplfied, syntax changes */
/* Rev 1.2 May 15 2006 SM- Changed GPIO205 to GPIO195 for use in 324, 208 packages */ 
/* Rev 1.3 Aug 12 2006 SM - Changed variable i to volatile */
/* Rev 1.4 Jun 18 2007 SM - Passed spr IVPR value from link file, changed GPIO pin */
/*                          and f0r MPC551x removed code to load spr IVOR11 */
/* Notes:  */
/*  1. MMU not initialized; must be done by debug scripts or BAM */
/*  2. SRAM not initialized; must be done by debug scripts or in crt0 type file */

#include "mpc563m.h" /* Use proper include file such as mpc5510.h or mpc5554.h */
 
extern IVOR11Handler();	        /* Needed for MPC555x only */
extern uint32_t __IVPR_VALUE;   /* Interrupt Vector Prefix value from link file */				

  uint32_t FITctr = 0;          /* Counter for Fixed Interval Timer interrupts */

asm void initIrqVectors(void) {
  lis		r0, __IVPR_VALUE@h     /* IVPR value is passed from link file */ 
  ori       r0, r0, __IVPR_VALUE@l /* Note: IVPR lower bits are unused in MPC555x */
  mtivpr	r0
/* The following two lines are required for MPC555x, and are not used for MPC551x */							
  li	    r0, IVOR11Handler@l	   /* IVOR11 = lower half of handler address */
  mtivor11	r0						
}

asm void initFIT(void) {
  li		r0, 0		       	/* Initialize time base to 0  */
  mttbu		r0					  
  mttbl		r0				
  lis	  	r0, 0x0181		  	/* Enable FIT interrupt and set	*/
  ori		r0, r0, 0x4000		/* FP=0, FPEXT=A for 0.7 sec timeout */
  mttcr		r0			
  li		r0, 0x4000		  	/* Enable Time Base and Decrementer (set TBEN) */
  mthid0	r0
}

void main (void) {	
  volatile uint32_t i = 0;  /* Dummy idle counter */

  initIrqVectors();			/* Initialize interrupt vectors registers*/
  initFIT();				/* Initialize FIT routine */
  SIU.PCR[114].R= 0x0303;	/* Initialize GPIO as output. */
  asm (" wrteei 1");		/* Enable external interrupts (INTC, DEC, FIT) */
  while (1) { i++; }		/* Loop forever */
}

asm void ClrFitFlag(void) {
  lis		r0, 0x0400
  mttsr		r0 				/* Write "1" clear FIT Interrupt Status flag */
}

void FitISR(void) {
  FITctr++;								/* Increment interrupt counter */
  SIU.GPDO[114].R = ~SIU.GPDI[114].R;	/* Toggle GPIO output */
  ClrFitFlag();							/* Clear FIT's flag */  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -