�������gӭ�M(j��n)�������зf���¿Ƽ�����˾�ٷ��W(w��ng)վ��
��FLASH��(sh��)��(j��)ͨ����Ҫ���L�r(sh��)�g������RAM�ǘӿ��Ԍ�(sh��)�r(sh��)���������Ҳ��������̻��xȡFLASH��(sh��)��(j��)��Ҫ��ѭ�ஔ(d��ng)��(f��)�s�ĕr(sh��)���E��N76E003�ṩ����FALSH���̷�ʽ�����Ԏ����Ñ�ͨ�^IAP��ʽ�����¾���FLASH��(n��i)����IAP����ͨ�^ܛ����(sh��)�F(xi��n)�ھ�늲����;��̵ķ�����
ͨ�^�O(sh��)��IAPEN��CHPCON.0��TA���o(h��)��ʹ��IAP�������O(sh��)��IAPUEN�Ĵ���������(y��ng)λ��ʹ����Ҫ������FLASH�^(q��)��CONFIG��LDROM��APROM�����Ñ�16λ������ַ����IAPAH��IAPAL����(sh��)��(j��)����IAPFD�������IAPCN��Ȼ��ͨ�^�O(sh��)���|�l(f��)λIAPGO(IAPTRG.0)��ȥ��(zh��)��IAP��ע�⣺IAPTRGҲ��TA���o(h��)���˕r(sh��)��CPU���ֳ���Ӌ(j��)��(sh��)������(n��i)ǶIAP�Ԅ�(d��ng)���ƃ�(n��i)����늱����늉�����̖�r(sh��)���������;��̕r(sh��)�g�ǃ�(n��i)�����Ƶ����c����늉����l�ʟo�P(gu��n)��ͨ��퓲����r(sh��)�g��5ms���ֹ�(ji��)���̕r(sh��)�g�� 3.5��s��IAP��(d��ng)����ɺ�������Ӌ(j��)��(sh��)���^�m(x��)�\(y��n)��֮���ָ����IAPGOλ���Ԅ�(d��ng)���㡣IAPFF (CHPCON.6)��IAP�e(cu��)�`��(bi��o)־�������Á�z��֮ǰIAP�����ɹ��c����ͨ�^�@Щ��ܛ�����O(sh��)�����Ñ����Ժܷ��㌦FLASH�惦(ch��)���M(j��n)�в��������̺�У�(y��n)��
IAP���Է����Ñ�����FLASH��(n��i)�ݣ����^�Ñ������ѭһ��Ҏ(gu��)�t���Դ_��IAP���_��(zh��)������t�������_���ĽY(ji��)���������p�����������������Č������_��(zh��)��IAP�кܺý��h��
(1)�]��IAP�����r(sh��)���Ñ������IAPEN (CHPCON.0)λ�����Է�ֹϵ�y(t��ng)�����|�l(f��)IAP�����⣬IAP��Ҫʹ�Ã�(n��i)��HIRC��ʎ��������x���ⲿ�r(sh��)�Դ����ֹIAP��ֹͣ��(n��i)��HIRC�������_(d��)��ʡ늵�Ŀ�ġ�ע����IAPEN��TA���o(h��)��
(2)��(d��ng)LOCKλ(CONFIG0.1) ��������IAP�x�����������Ȼ��Ч��
���M(j��n)��IAP�r(sh��)������Д���_��(y��ng)ԓ�R�r(sh��)���EAλ
�����̵�퓲����Ǯ�(d��ng)ǰ���a��(zh��)�е�퓡���t��(hu��)���F(xi��n)�����A(y��)Ӌ(j��)�����(d��ng)���������ƉĴ惦(ch��)�Ĕ�(sh��)��(j��)
ʹ��flash�惦(ch��)�����锵(sh��)��(j��)�惦(ch��)
��һ�㑪(y��ng)�������Еr(sh��)��ҪһЩ��(sh��)��(j��)�ڔ����r�²��܁Gʧ���Ա��Ñ��x�ػ����������ϵ�y(t��ng)���Ƶą���(sh��)��N76E003֧��IAP���ܲ��Ҵ惦(ch��)��flash�е��ֹ�(ji��)��������MOVCָ���xȡ�����Ժ��m���������ʧ��(sh��)��(j��)�惦(ch��)����Flash���Δ�(sh��)��100,000�������
�����(y��ng)�ô��a��
�R����������:
;******************************************************************************
; This code illustrates how to use IAP to make APROM 201h as a byte of
; Data Flash when user code is executed in APROM.
;******************************************************************************
PAGE_ERASE_AP EQU 00100010b
BYTE_PROGRAM_AP EQU 00100001b
ORG 0000h
MOV TA,#0Aah ;CHPCON is TA protected
MOV TA,#55h
ORL CHPCON,#00000001b ;IAPEN = 1, enable IAP mode
MOV TA,#0Aah ;IAPUEN is TA protected
MOV TA,#55h
ORL IAPUEN,#00000001b ;APUEN = 1, enable APROM update
MOV IAPCN,#PAGE_ERASE_AP ;Erase page 200h~27Fh
MOV IAPAH,#02h
MOV IAPAL,#00h
MOV IAPFD,#0FFh
MOV TA,#0Aah ;IAPTRG is TA protected
MOV TA,#55h
ORL IAPTRG,#00000001b ;write ��1�� to IAPGO to trigger IAP process
MOV IAPCN,#BYTE_PROGRAM_AP ;Program 201h with 55h
MOV IAPAH,#02h
MOV IAPAL,#01h
MOV IAPFD,#55h
MOV TA,#0Aah
MOV TA,#55h
ORL IAPTRG,#00000001b
MOV TA,#0Aah
MOV TA,#55h
ANL IAPUEN,#11111110b ;APUEN = 0, disable APROM update
MOV TA,#0Aah
MOV TA,#55h
ANL CHPCON,#11111110b ;IAPEN = 0, disable IAP mode
MOV DPTR,#201h
CLR A
MOVC A,@A+DPTR ;Read content of address 201h
MOV P0,A
SJMP $
C �Z����������:
//******************************************************************************
// This code illustrates how to use IAP to make APROM 201h as a byte of
// Data Flash when user code is executed in APROM.
//******************************************************************************
#define PAGE_ERASE_AP 0x22
#define BYTE_PROGRAM_AP 0x21
/*Data Flash, as part of APROM, is read by MOVC. Data Flash can be defined as
128-element array in ��code�� area from absolute address 0x0200 */
volatile unsigned char code Data_Flash[128] _at_ 0x0200;
Main (void)
{
TA = 0xAA; //CHPCON is TA protected
TA = 0x55;
CHPCON |= 0x01; //IAPEN = 1, enable IAP mode
TA = 0xAA; //IAPUEN is TA protected
TA = 0x55;
IAPUEN |= 0x01; //APUEN = 1, enable APROM update
IAPCN = PAGE_ERASE_AP; //Erase page 200h~27Fh
IAPAH = 0x02;
IAPAL = 0x00;
IAPFD = 0xFF;
TA = 0xAA; //IAPTRG is TA protected
TA = 0x55;
IAPTRG |= 0x01; //write ��1�� to IAPGO to trigger IAP process
IAPCN = BYTE_PROGRAM_AP; // Program 201h with 55h
IAPAH = 0x02;
IAPAL = 0x01;
IAPFD = 0x55;
TA = 0xAA;
TA = 0x55;
IAPTRG |= 0x01; //write ��1�� to IAPGO to trigger IAP process
TA = 0xAA; //IAPUEN is TA protected
TA = 0x55;
IAPUEN &= ~0x01; //APUEN = 0, disable APROM update
TA = 0xAA; //CHPCON is TA protected
TA = 0x55;
CHPCON &= ~0x01; //IAPEN = 0, disable IAP mode
P0 = Data_Flash[1]; //Read content of address 200h+1
while(1);
}
N76E003 APROM����DATAFLASH��EEPROM��ʽ
#include <stdio.h> #include "N76E003.h" #include "Common.h" #include "Delay.h" #include "SFR_Macro.h" #include "Function_Define.h" bit BIT_TMP; //------------------------------------------------------------------------- UINT8 read_APROM_BYTE(UINT16 code *u16_addr) { UINT8 rdata; rdata = *u16_addr>>8; return rdata; } //------------------------------------------------------------------------- /***************************************************************************************************************** write_DATAFLASH_BYTE : user can copy all this subroutine into project, then call this function in main. ******************************************************************************************************************/ void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data) { UINT8 looptmp=0,u8_addrl_r; unsigned char code *cd_longaddr; unsigned char xdata *xd_tmp; //Check page start address u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { u8_addrl_r = 0; } else { u8_addrl_r = 0x80; } //Save APROM data to XRAM xd_tmp = 0x80; cd_longaddr = (u16_addr&0xff00)+u8_addrl_r; while (xd_tmp !=0x100) { *xd_tmp = *cd_longaddr; looptmp++; xd_tmp++; cd_longaddr++; } // Modify customer data in XRAM u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { xd_tmp = u8_addrl_r+0x80; } else { xd_tmp = u8_addrl_r+0; } *xd_tmp = u8_data; //Erase APROM DATAFLASH page IAPAL = u16_addr; IAPAH = u16_addr>>8; IAPFD = 0xFF; set_IAPEN; set_APUEN; IAPCN = 0x22; set_IAPGO; //Save changed RAM data to APROM DATAFLASH u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { u8_addrl_r =0; } else { u8_addrl_r = 0x80; } xd_tmp = 0x80; IAPAL = u8_addrl_r; IAPAH = u16_addr>>8; set_IAPEN; set_APUEN; IAPCN = 0x21; while (xd_tmp !=0xFF) { IAPFD = *xd_tmp; set_IAPGO; IAPAL++; xd_tmp++; } clr_APUEN; clr_IAPEN; } /******************************************************************************************************************/ void main (void) { UINT8 datatemp; /* -------------------------------------------------------------------------*/ /* Dataflash use APROM area */ /* APROM 0x3800~0x38FF demo as dataflash */ /* Please use Memory window key in C:0x3800 to check earse result */ /* -------------------------------------------------------------------------*/ //call write byte write_DATAFLASH_BYTE (0x3881,0x55); write_DATAFLASH_BYTE (0x3882,0x56); write_DATAFLASH_BYTE (0x3855,0xaa); write_DATAFLASH_BYTE (0x3856,0x66); //call read byte datatemp = read_APROM_BYTE(0x3882); while(1); }
����ᘌ�ÿһ��(g��)�{(di��o)�ú���(sh��)�M(j��n)���v��
void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data) { UINT8 looptmp=0,u8_addrl_r; unsigned char code *cd_longaddr; unsigned char xdata *xd_tmp; //Check page start address u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { u8_addrl_r = 0; } else { u8_addrl_r = 0x80; } //Save APROM data to XRAM xd_tmp = 0x80; cd_longaddr = (u16_addr&0xff00)+u8_addrl_r; while (xd_tmp !=0x100) { *xd_tmp = *cd_longaddr; looptmp++; xd_tmp++; cd_longaddr++; } // Modify customer data in XRAM u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { xd_tmp = u8_addrl_r+0x80; } else { xd_tmp = u8_addrl_r+0; } *xd_tmp = u8_data; //Erase APROM DATAFLASH page IAPAL = u16_addr; IAPAH = u16_addr>>8; IAPFD = 0xFF; set_IAPEN; set_APUEN; IAPCN = 0x22; set_IAPGO; //Save changed RAM data to APROM DATAFLASH u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { u8_addrl_r =0; } else { u8_addrl_r = 0x80; } xd_tmp = 0x80; IAPAL = u8_addrl_r; IAPAH = u16_addr>>8; set_IAPEN; set_APUEN; IAPCN = 0x21; while (xd_tmp !=0xFF) { IAPFD = *xd_tmp; set_IAPGO; IAPAL++; xd_tmp++; } clr_APUEN; clr_IAPEN; }
�����@��(g��)����(sh��)���nj�DATAFLASH EEPROM�M(j��n)���x������������(sh��)�o����ַ�͔�(sh��)��(j��)����ԓ����(sh��)�M(j��n)��̎��
void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data) { UINT8 looptmp=0,u8_addrl_r; unsigned char code *cd_longaddr; unsigned char xdata *xd_tmp; //Check page start address u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { u8_addrl_r = 0; } else { u8_addrl_r = 0x80; } //Save APROM data to XRAM xd_tmp = 0x80; cd_longaddr = (u16_addr&0xff00)+u8_addrl_r; while (xd_tmp !=0x100) { *xd_tmp = *cd_longaddr; looptmp++; xd_tmp++; cd_longaddr++; } // Modify customer data in XRAM u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { xd_tmp = u8_addrl_r+0x80; } else { xd_tmp = u8_addrl_r+0; } *xd_tmp = u8_data; //Erase APROM DATAFLASH page IAPAL = u16_addr; IAPAH = u16_addr>>8; IAPFD = 0xFF; set_IAPEN; set_APUEN; IAPCN = 0x22; set_IAPGO; //Save changed RAM data to APROM DATAFLASH u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { u8_addrl_r =0; } else { u8_addrl_r = 0x80; } xd_tmp = 0x80; IAPAL = u8_addrl_r; IAPAH = u16_addr>>8; set_IAPEN; set_APUEN; IAPCN = 0x21; while (xd_tmp !=0xFF) { IAPFD = *xd_tmp; set_IAPGO; IAPAL++; xd_tmp++; } clr_APUEN; clr_IAPEN; }
��(bi��o)�t�����漰���ɂ�(g��)�Ĵ���IAPL�cIAPH���@��ʲô����������һ���փ�
�ɴ˿�֪���@�ɂ�(g��)�Ĵ����nj���16λ��ַ�ֹ�(ji��)����Ҳ�����fu8_addrl_r�@��(g��)׃���ĺ��x�ǽo�Ĵ����ṩ��ַ���������ҪһЩ��(sh��)��(j��)�ķ�����̎����
u8_addrl_r = u16_addr;
if (u8_addrl_r<0x80)
{
u8_addrl_r = 0;
}
else
{
u8_addrl_r = 0x80;
}
//Save APROM data to XRAM
xd_tmp = 0x80;
cd_longaddr = (u16_addr&0xff00)+u8_addrl_r;
while (xd_tmp !=0x100)
{
*xd_tmp = *cd_longaddr;
looptmp++;
xd_tmp++;
cd_longaddr++;
}
Save APROM data to XRAM
���Ȳ鿴N76E003�Ĕ�(sh��)��(j��)�փԵ�֪�@�wоƬ��XRAM�Ĵ�С�飺768�ֹ�(ji��)i ������С��0x300������߀��֪��Flashÿһ퓵Ĵ�С��128�ֹ�(ji��)��0x80���@�Κv�̄��օ^(q��)��0X100��256����
// Modify customer data in XRAM u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { xd_tmp = u8_addrl_r+0x80; } else { xd_tmp = u8_addrl_r+0; } *xd_tmp = u8_data; //Erase APROM DATAFLASH page IAPAL = u16_addr; IAPAH = u16_addr>>8; IAPFD = 0xFF; set_IAPEN; set_APUEN; IAPCN = 0x22; set_IAPGO;
Modify customer data in XRAM ��XRAM���Ŀ͑���(sh��)��(j��)
//Save changed RAM data to APROM DATAFLASH u8_addrl_r = u16_addr; if (u8_addrl_r<0x80) { u8_addrl_r =0; } else { u8_addrl_r = 0x80; } xd_tmp = 0x80; IAPAL = u8_addrl_r; IAPAH = u16_addr>>8; set_IAPEN; set_APUEN; IAPCN = 0x21; while (xd_tmp !=0xFF) { IAPFD = *xd_tmp; set_IAPGO; IAPAL++; xd_tmp++; } clr_APUEN; clr_IAPEN; }
�@���ֱ��^��(f��)�s���Һ��m(x��)��(hu��)�и��£������ʲô��Ҋ���h���gӭ�uՓ
֪�R(sh��)�]�ЌW(xu��)��ĕr(sh��)����ֻ�ܱ��C������Լ������첻һ��������(g��)�������oՓ������߀���������oՓ�nj��I(y��)���|(zh��)��߀�Ǟ���̎�������˽��
�ߴa�P(gu��n)ע�҂�
���棺0755-82591176
�]�䣺vicky@yingtexin.net
��ַ�����������A�^(q��)���νֵ����δ��973�f�����S��(chu��ng)�I(y��)�@A��2��A08