日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(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"

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

//eeprom有一個(gè)64的頁(yè)緩存,寫(xiě)入的時(shí)候不需要頁(yè)地址只需要頁(yè)偏移地址先寫(xiě)到這個(gè)頁(yè)里面

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

void e2prom_init(void)

{

u32 val;

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

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

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

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

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;//寫(xiě)入地址

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

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

LPC_EEPROM->WDATA=value;

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

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;//寫(xiě)入地址

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;//寫(xiě)入地址

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)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

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

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

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

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

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

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

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

關(guān)鍵字: pic16f877a 內(nèi)部eeprom 內(nèi)部函數(shù) 讀寫(xiě)實(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擦寫(xiě)次數(shù)可達(dá)100,000 次以上,先來(lái)介紹下IS...

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

首先是gpio中斷,這一點(diǎn)和1768不同,1768使用的中斷時(shí)和eint3共用中斷通道,到了1788,專(zhuān)門(mén)為gpio開(kāi)辟了中斷#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ū)動(dòng)真彩屏

Norflash型號(hào)為sst39vf32#ifndef __NORFLASH_H_#define __NORFLASH_H_#include "common.h"#include "dela...

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