www.pudn.com > SPI.rar > main.c, change:2012-04-08,size:2592b


/*---------------------------------------------------------*/ 
/************************************************************ 
飞翔科技MC9S08DZ60汽车电子开发板 
本代码为SPI模块的驱动代码,包含了SPI的初始化,发送和接收 
在开发板上没有实验现象,仅供读者参考 
E-mail: 2008f.d@163.com 
淘宝店:http://fxfreefly.taobao.com 
************************************************************/ 
/*---------------------------------------------------------*/ 
#include <hidef.h> /* for EnableInterrupts macro */ 
#include "derivative.h" /* include peripheral declarations */ 
 
#define CS PTED_PTED2 
#define CS_dir PTEDD_PTEDD2 
 
/*************************************************************/ 
/*                  初始化总线时钟PEE模式                    */ 
/*              外部晶振频率为4MHz,总线频率16MHz            */ 
/*************************************************************/ 
void INIT_MCG(void)  
{ 
  MCGC2=0x36;         
  while(!MCGSC_OSCINIT);      
  MCGC1=0xb8; 
  while(MCGSC_IREFST); 
  while(MCGSC_CLKST!=0b10); 
  MCGC2_LP = 1; 
  MCGC1 = 0x90; 
  MCGC3 = 0x48;      
  MCGC2_LP = 0; 
  while(!MCGSC_PLLST); 
  while(!MCGSC_LOCK); 
  MCGC1 = 0x10; 
  while(MCGSC_CLKST!=0b11); 
}  
 
/*************************************************************/ 
/*                      初始化SPI模块                        */ 
/*************************************************************/ 
void INIT_SPI(void)  
{ 
  SPIC1 = 0b01010000;   //使能SPI,禁止中断,时钟高有效,相位为0; 
  SPIC2 = 0x00;         //SS管脚为普通I/O,双向模式; 
  SPIBR = 0x10;         //设置SPI时钟频率为4MHz; 
  CS_dir=1; 
  CS = 1; 
} 
 
/*************************************************************/ 
/*                       SPI发送函数                         */ 
/*************************************************************/ 
void SPI_send(unsigned char data)  
{ 
  while(!SPIS_SPTEF); 
  SPID = data;  
} 
 
/*************************************************************/ 
/*                       SPI接收函数                         */ 
/*************************************************************/ 
unsigned char SPI_receive(void)  
{ 
  unsigned char temp,data; 
  while(!SPIS_SPRF); 
  temp = SPIS; 
  data = SPID; 
  return(data); 
} 
 
 
/*************************************************************/ 
/*                         主函数                            */ 
/*************************************************************/ 
void main(void) { 
  DisableInterrupts;  
  SOPT1=0;    //关闭看门狗 
  INIT_MCG(); 
  INIT_SPI(); 
  EnableInterrupts;  
  CS = 0; 
   
  for(;;)  
  { 
  }  
}