|
При написании программы для PIC18F452 столкнулся с такой проблемой.
В MPLAB 6.42+ICD2 не читается и не записывается внутренний EEPROM PIC, хотя в MPLAB+SIM всё нормально.
Участок программы для установки битов конфигурации:
#pragma romdata CONFIG
_CONFIG_DECL (_OSCS_ON_1H & _OSC_HSPLL_1H,
_PWRT_ON_2L & _BOR_ON_2L & _BORV_25_2L,
_WDT_OFF_2H & _WDTPS_1_2H,
_CONFIG3H_DEFAULT,
_LVP_OFF_4L,
_CONFIG5L_DEFAULT,
_CPB_OFF_5H & _CPD_OFF_5H,
_CONFIG6L_DEFAULT,_CONFIG6H_DEFAULT,_CONFIG7L_DEFAULT,
_CONFIG7H_DEFAULT);
#pragma romdata
---------------------------------------------------------------------
Данные EEPROM:
#pragma romdata EEPROMSECT=0xF00000
rom UCHAR S_CORE_ROM = 0xFF, V_CORE_ROM = 0xCC;
#pragma romdata
---------------------------------------------------------------------
Процедура для чтения данных из EEPROM в ОЗУ (взята из форума на www.microchip.com):
#include typedef unsigned char UCHAR; void memcpyee2ram(void ram far *, void rom far *, int); EEADR = (UCHAR)( src - (void rom far *)(0x00f00000) ); while (nBytes--) *p++ = byte; -------------------------------------------------------------
E-mail:
info@telesys.ru
/****************************************************************
**
** memcpyee2ram
**
** Return Value:
** none
**
*****************************************************************/
void memcpyee2ram(void ram far * dst, void rom far * src, int nBytes)
{
UCHAR ram far* p = dst;
UCHAR byte;
EECON1 = 0;
{
INTCONbits.GIE = 0;
EECON1bits.RD = 1;
byte = EEDATA;
INTCONbits.GIE = 1;
EEADR++;
}
}
При выполнении команды EECON1bits.RD = 1 этот бит не устанавливается в "1".
В чём может быть дело ???
Ответы