- [cpp] view plaincopy
- //向EEPROM中写入数据,然后读出数据,赋值给PORTD,点亮相应的LED灯
-
- #include <hidef.h> /* for EnableInterrupts macro */
- #include "derivative.h" /* include peripheral declarations */
-
-
- #define uint unsigned int
- #define uchar unsigned char
-
-
- #define LED PTDD
- #define LED_DIR PTDDD
-
- #define LED_OFF 0XFF
-
-
- void Read_EEPROM(uint start_addr, uchar *pReadbuf, uchar length);
- void Write_EEPROM(uint start_addr, uchar *pData, uchar length);
-
- //uchar Data[6] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
- //uchar Readbuf[6] = {0};
-
- uchar Data[6] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF};
- uchar Readbuf[6] = {0XFF};
-
- uchar i = 0;
- uint j = 60000;
-
-
- /*************************************************************/
- /* 初始化总线时钟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);
- }
-
-
- void main(void) {
-
- DisableInterrupts;
- SOPT1 = 0;
- INIT_MCG();
-
- LED_DIR = 0XFF;
- LED = LED_OFF;
-
-
- EnableInterrupts; /* enable interrupts */
- /* include your code here */
-
-
-
- FCDIV = 73;//设置分频,16MHZ/8/(9+!)在150k到200khz之间
-
- //EEPROM整个空间为2*1024BYTES,地址为0x1400到0x17FF
-
- //写入数据部分
- Write_EEPROM(0X1400, Data, 6);
-
- //读出数据部分
- Read_EEPROM(0X1400, Readbuf, 6);
-
- while(1)
- {
- for(i = 0; i < 6; i++)
- {
- LED = Readbuf[i];
- while(j--);
-
- }
- }
-
-
-
-
-
-
- for(;;) {
- __RESET_WATCHDOG(); /* feeds the dog */
- } /* loop forever */
- /* please make sure that you never leave main */
- }
-
-
- void Write_EEPROM(uint start_addr, uchar *pData, uchar length)
- {
- uchar i;
- uchar *pAddr;
-
- if(FSTAT_FACCERR == 1)
- FSTAT_FACCERR = 1;//通过写入1来清除错误标记
-
- pAddr = (uchar *)(start_addr);//指定地址
- *pAddr = 0x01;
-
-
- FCMD = 0X40;//擦除命令
- FSTAT_FCBEF = 1;//启动命令
-
- asm{ //等待4个bus cycle
- NOP
- NOP
- NOP
- NOP
- }
-
- while(FSTAT_FCCF == 0);//等待完成
-
-
- for(i = 0; i < length; i++)
- {
-
- if(FSTAT_FACCERR == 1)
- FSTAT_FACCERR = 1;
-
- pAddr = (uchar *)(start_addr + i);
- *pAddr = pData[i];
-
- FCMD = 0X20;//写入命令
- FSTAT_FCBEF = 1;// 启动命令
- asm
- {
- NOP
- NOP
- NOP
- NOP
- }
-
- while(FSTAT_FCCF == 0);//等待完成
-
- }
-
- }
-
-
- void Read_EEPROM(uint start_addr, uchar *pReadbuf, uchar length)
- {
- uchar i;
- uchar *pAddr;
-
- for(i = 0; i < length; i++)
- {
- pAddr = (uchar *)(start_addr);
- pReadbuf[i] = *pAddr;
- start_addr++;
- }
-
- }
|