You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CubeSatSim/libs/libmf/source/radiord32.c

58 lines
875 B

#include "ax8052.h"
#include "libmftypes.h"
#include "libmfradio.h"
#if defined(SDCC)
__reentrantb uint32_t radio_read32(uint16_t addr) __reentrant __naked
{
addr;
__asm;
mov a,dph
anl a,#0x0F
orl a,#(AX8052_RADIOBASE >> 8)
mov dph,a
mov a,_IE
rlc a
clr _EA
mov a,_RADIOACC
mov b,a
anl a,#0xFC
orl a,#0x03
mov _RADIOACC,a
movx a,@dptr
mov _RADIOACC,b
mov b,_RADIODATA2
mov dph,_RADIODATA1
mov dpl,_RADIODATA0
mov _EA,c
ret
__endasm;
}
#else
__reentrantb uint32_t radio_read32(uint16_t addr) __reentrant
{
uint8_t iesave, racc;
uint32_t r;
addr &= 0xFFF;
addr |= AX8052_RADIOBASE;
iesave = IE & 0x80;
EA = 0;
racc = RADIOACC;
RADIOACC = (racc & 0xFC) | 0x03;
r = *(uint8_t __xdata *)addr;
r <<= 8;
r |= RADIODATA2;
r <<= 8;
r |= RADIODATA1;
r <<= 8;
r |= RADIODATA0;
RADIOACC = racc;
IE |= iesave;
return r;
}
#endif

Powered by TurnKey Linux.