accessing builtin flash-api functions in at89c5131

Oct 06, 2003 0 Replies

When trying to call the builtin api functions of the Atmel AT89C5131 I get no results - the call simply returns the input values instead of the requested register values.



The function doing the call is:



--------------------------------------------------- #define MSK_AUXR1_ENBOOT 0x20 #define MAP_BOOT AUXR1 |= MSK_AUXR1_ENBOOT; #define UNMAP_BOOT AUXR1 &= ~MSK_AUXR1_ENBOOT;



typedef unsigned char Uchar;



Uchar data api_command _at_ 0x1C; Uchar data api_value _at_ 0x1D; Uchar data api_dph _at_ 0x1E; Uchar data api_dpl _at_ 0x1F;



Uchar __api_fct_set_1 (Uchar _R1, Uint16 _DPTR) small { bit ea_save;



ea_save = EA; EA = 0;



api_dph = (_DPTR >> 8); api_dpl = (_DPTR & 0xFF); api_command = _R1; api_value = _R1; MAP_BOOT; __API_FLASH_ENTRY_POINT(); UNMAP_BOOT; EA = ea_save; /* restore interrupt state */ return (api_value); }



------------------------------------------ calling the assembler function:



------------------------------------------- __API_FLASH_ENTRY_POINT: PUSH AR2 PUSH AR4 PUSH AR6 LCALL 0FFF0h POP AR6 POP AR4 POP AR2 Ret



------------------------------------------- According to (my interpretation of) Atmel's doc ("AT89C5131 USB Bootloader") the call should return some configuration and manufacturer information - e.g.: manufacturer_code = __api_fct_set_1(5,0x30);



This function's code resulted from a modification of a code sample supplied by Atmel for the AT89C51RD2 - modified according to differences in the parameter passing method between the two uCs' bootloader codes. As mentioned above the call acts like a single return statement leaving all values unchanged.



What am I doing wrong ?


Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required