www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]Lpc1788內(nèi)置有eeprom使用代碼#ifndef __E2PRONINCHIP_H_#define __E2PROMINCHIP_H#include "common.h"#include "sys.h"#include "debugserial.h"#define EEPROM_CLOCK 375000void e2prom_init(void);u8 e2prom_write

Lpc1788內(nèi)置有eeprom

使用代碼

#ifndef __E2PRONINCHIP_H_

#define __E2PROMINCHIP_H

#include "common.h"

#include "sys.h"

#include "debugserial.h"

#define EEPROM_CLOCK 375000

void e2prom_init(void);

u8 e2prom_write_8(u8 page,u8 addr,u8 value);

u8 e2prom_write_16(u8 page,u8 addr,u16 value);

u8 e2prom_write_32(u8 page,u8 addr,u32 value);

u8 e2prom_read_8(u8 page,u8 addr,u8*value);

u8 e2prom_read_16(u8 page,u8 addr,u16*value);

u8 e2prom_read_32(u8 page,u8 addr,u32*value);

u8 e2prom_program(u8 page);

u8 e2prom_test(void);

#endif

#include "e2prominchip.h"

//有一些寄存器只能寫不能讀,用起來的時候要小心& "子類的應(yīng)用,如果發(fā)生總線中斷可能是這些因素引起的

//eeprom有一個64的頁緩存,寫入的時候不需要頁地址只需要頁偏移地址先寫到這個頁里面

//然后寫入頁地址,也緩存直接寫入整個頁面(應(yīng)該是匹配 不同 寫入)

void e2prom_init(void)

{

u32 val;

LPC_EEPROM->PWRDWN=0x00;//清除掉電

LPC_EEPROM->CLKDIV=((u16)(SystemCoreClock/EEPROM_CLOCK))-1;//設(shè)置時鐘

val=((((SystemCoreClock/1000000)*15)/1000)+1);

val|=(((((SystemCoreClock/1000000)*55)/1000)+1)<<8);//設(shè)置等待時間 NS級別

val|=(((((SystemCoreClock/1000000)*35)/1000)+1)<<16);

LPC_EEPROM->WSTATE=val;

LPC_EEPROM->INT_CLR_STATUS=(1<<26)|(1<<28);//清除中斷狀態(tài)

// LPC_EEPROM->INT_CLR_ENABLE = (1<<26)|(1<<28);//關(guān)閉中斷

}

static u8 write_8(u8 page,u8 addr,u8 value)

{

u16 dataddr=0;

if(page>=64||addr>=64)

{

return1;

}

dataddr=(addr&0x3f);

LPC_EEPROM->ADDR=dataddr;//寫入地址

LPC_EEPROM->CMD=3;//非連續(xù)八位寫入

LPC_EEPROM->INT_CLR_STATUS=(1<<26)|(1<<28);//清除中斷狀態(tài)

LPC_EEPROM->WDATA=value;

while(!(LPC_EEPROM->INT_STATUS&(1<<26)));//等待寫入完成

LPC_EEPROM->INT_CLR_STATUS=(1<<26);//清除

return0;

}

u8 e2prom_write_8(u8 page,u8 addr,u8 value)

{

if(write_8(page,addr,value))return1;

returne2prom_program(page);

}

u8 e2prom_write_16(u8 page,u8 addr,u16 value)

{

u8 ret;

ret=write_8(page,addr,(u8)(value>>8));

if(ret)returnret;

ret=write_8(page,addr+1,(u8)value);

if(ret)returnret;

returne2prom_program(page);

}

u8 e2prom_write_32(u8 page,u8 addr,u32 value)

{

u8 ret;

ret=write_8(page,addr,(u8)(value>>24));

if(ret)returnret;

ret=write_8(page,addr+1,(u8)(value>>16));

if(ret)returnret;

ret=write_8(page,addr+2,(u8)(value>>8));

if(ret)returnret;

ret=write_8(page,addr+3,(u8)value);

if(ret)returnret;

returne2prom_program(page);

}

u8 e2prom_read_8(u8 page,u8 addr,u8*value)

{

u16 dataddr=0;

LPC_EEPROM->INT_CLR_STATUS=(1<<26)|(1<<28);//清除中斷狀態(tài)

if(page>=64||addr>=64)

{

return1;

}

dataddr=page;

dataddr<<=6;

dataddr|=(addr&0x3f);

LPC_EEPROM->ADDR=dataddr;//寫入地址

LPC_EEPROM->CMD=0;//非連續(xù)八位讀出

while(!(LPC_EEPROM->INT_STATUS&(1<<26)));//等待讀出完成

*value=LPC_EEPROM->RDATA;

LPC_EEPROM->INT_CLR_STATUS=(1<<26);//清除

return0;

}

u8 e2prom_read_16(u8 page,u8 addr,u16*value)

{

u8 a,b,ret;

ret=e2prom_read_8(page,addr,&a);

if(ret)returnret;

ret=e2prom_read_8(page,addr+1,&b);

if(ret)returnret;

*value=a;

*value<<=8;

*value+=b;

return0;

}

u8 e2prom_read_32(u8 page,u8 addr,u32*value)

{

u8 a,b,c,d,ret;

ret=e2prom_read_8(page,addr,&a);

if(ret)returnret;

ret=e2prom_read_8(page,addr+1,&b);

if(ret)returnret;

ret=e2prom_read_8(page,addr+2,&c);

if(ret)returnret;

ret=e2prom_read_8(page,addr+3,&d);

if(ret)returnret;

*value=a;

*value<<=8;

*value+=b;

*value<<=8;

*value+=c;

*value<<=8;

*value+=d;

return0;

}

u8 e2prom_program(u8 page)

{

u16 dataddr=0;

LPC_EEPROM->INT_CLR_STATUS=(1<<28);//清除編程中斷

dataddr=(page&0x1f);

dataddr<<=6;

LPC_EEPROM->ADDR=dataddr;//寫入地址

LPC_EEPROM->CMD=6;//編程指令

while(!(LPC_EEPROM->INT_STATUS&(1<<28)));

return0;

}

u8 e2prom_test(void)

{

u8 a,b,c,d;

u32 read;

e2prom_write_32(1,0,0xaabbccdd);

e2prom_read_8(1,0,&a);

e2prom_read_8(1,1,&b);

e2prom_read_8(1,2,&c);

e2prom_read_8(1,3,&d);

printf("read a value is %2xrn",a);

printf("read b value is %2xrn",b);

printf("read c value is %2xrn",c);

printf("read d value is %2xrn",d);

e2prom_read_32(1,0,&read);

printf("read 32 value is %8xrn",read);

return0;

}


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

  引 言   近年來,由于我國社會經(jīng)濟(jì)的快速發(fā)展和人們生活方式的轉(zhuǎn)變,心血管病發(fā)病率及相關(guān)危險因素呈不斷上升趨勢,人們也越來越注意自己的身心健康。過去測量血壓必須到醫(yī)院,由醫(yī)生用水銀血

關(guān)鍵字: 電子血壓計 脈搏波 lpc1788 s0012a

單片機(jī)運(yùn)行時的數(shù)據(jù)都存在于RAM(隨機(jī)存儲器)中,在掉電后RAM 中的數(shù)據(jù)是無法保留的,那么怎樣使數(shù)據(jù)在掉電后不丟失呢?這就需要使用EEPROM 或FLASHROM 等存儲器來實(shí)現(xiàn)。

關(guān)鍵字: stc89c52rc 內(nèi)部eeprom 單片機(jī)

STM32L系列單片機(jī)內(nèi)部提供了EEPROM存儲區(qū)域,但實(shí)質(zhì)上,其FLASH也是EEPROM類型,只不過有一塊區(qū)域被開放出來專門用作EEPROM操作而已。STM32L的EEPROM使用壽命設(shè)計為100000次擦寫以上...

關(guān)鍵字: 內(nèi)部eeprom 單片機(jī) stm32l系列

/************************************************PIC16F877A 內(nèi)部EEPROM讀寫實(shí)驗(yàn)*******Author:hnrainDate:2010-12-26Ver...

關(guān)鍵字: pic16f877a 內(nèi)部eeprom 內(nèi)部函數(shù) 讀寫實(shí)驗(yàn)

#ifndef __MYIIC_H_#define __MYIIC_H_#include "common.h"#include "delay.h"#include "de...

關(guān)鍵字: io口 lpc1788 模擬iic

STC89C51、52內(nèi)部都自帶有2K字節(jié)的EEPROM,54、55和58都自帶有16K字節(jié)的EEPROM,STC單片機(jī)是利用IAP技術(shù)實(shí)現(xiàn)的EEPROM,內(nèi)部Flash擦寫次數(shù)可達(dá)100,000 次以上,先來介紹下IS...

關(guān)鍵字: 51單片機(jī) 內(nèi)部eeprom 讀寫

首先是gpio中斷,這一點(diǎn)和1768不同,1768使用的中斷時和eint3共用中斷通道,到了1788,專門為gpio開辟了中斷#ifndef __JOYPAD_H_#define __JOYPAD_H_#include...

關(guān)鍵字: lpc1788 外部中斷 gpio中斷

#ifndef __DEBUGSERIAL_H_#define __DEBUGSERIAL_H_#include "sys.h"#include "stdio.h"extern u...

關(guān)鍵字: lpc1788 串口通訊

#ifndef __LCD_H_#define __LCD_H_#include "common.h"#include "debugserial.h"#include "...

關(guān)鍵字: lpc1788 lcd接口 驅(qū)動真彩屏

Norflash型號為sst39vf32#ifndef __NORFLASH_H_#define __NORFLASH_H_#include "common.h"#include "dela...

關(guān)鍵字: lpc1788 emc驅(qū)動norflash
關(guān)閉