This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

builtin api functions on Atmel at89c5131

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 ?

0