mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Add sfr16 SFR_REG_ADDR_U16.
So instead do it manual split a uint16_t in to two uint8_t.
The compiler can do it, so reduces user error.
Note: compiler writes the lower/LSB part first.
When that is importent this can´t be used.
Assembly is still the same except note above.
This commit is contained in:
committed by
René van Dorst
parent
250beae09b
commit
af0135bcce
@@ -1,8 +1,12 @@
|
|||||||
/* SFR control registers for switch register access */
|
/* SFR control registers for switch register access */
|
||||||
__sfr __at(0xa0) SFR_EXEC_GO;
|
__sfr __at(0xa0) SFR_EXEC_GO;
|
||||||
__sfr __at(0xa1) SFR_EXEC_STATUS;
|
__sfr __at(0xa1) SFR_EXEC_STATUS;
|
||||||
|
__sfr16 __at(0xa2a3) SFR_REG_ADDR_U16;
|
||||||
__sfr __at(0xa2) SFR_REG_ADDRH;
|
__sfr __at(0xa2) SFR_REG_ADDRH;
|
||||||
__sfr __at(0xa3) SFR_REG_ADDRL;
|
__sfr __at(0xa3) SFR_REG_ADDRL;
|
||||||
|
__sfr16 __at(0xa4a5) SFR_DATA_U16;
|
||||||
|
__sfr32 __at(0xa4a5a6a7) SFR_DATA_U32;
|
||||||
|
__sfr32 __at(0xa7a6a5a4) SFR_DATA_U32LE;
|
||||||
__sfr __at(0xa4) SFR_DATA_24;
|
__sfr __at(0xa4) SFR_DATA_24;
|
||||||
__sfr __at(0xa5) SFR_DATA_16;
|
__sfr __at(0xa5) SFR_DATA_16;
|
||||||
__sfr __at(0xa6) SFR_DATA_8;
|
__sfr __at(0xa6) SFR_DATA_8;
|
||||||
|
|||||||
+8
-8
@@ -284,8 +284,8 @@ void setup_timer0(void)
|
|||||||
|
|
||||||
void reg_read(uint16_t reg_addr)
|
void reg_read(uint16_t reg_addr)
|
||||||
{
|
{
|
||||||
SFR_REG_ADDRH = reg_addr >> 8;
|
SFR_REG_ADDR_U16 = reg_addr;
|
||||||
SFR_REG_ADDRL = reg_addr;
|
|
||||||
SFR_EXEC_GO = SFR_EXEC_READ_REG;
|
SFR_EXEC_GO = SFR_EXEC_READ_REG;
|
||||||
do {
|
do {
|
||||||
} while (SFR_EXEC_STATUS != 0);
|
} while (SFR_EXEC_STATUS != 0);
|
||||||
@@ -298,8 +298,8 @@ void reg_read_m(uint16_t reg_addr)
|
|||||||
#ifdef REGDBG
|
#ifdef REGDBG
|
||||||
if (EA) { write_char('r'); print_byte(reg_addr >> 8); print_byte(reg_addr); write_char(':'); }
|
if (EA) { write_char('r'); print_byte(reg_addr >> 8); print_byte(reg_addr); write_char(':'); }
|
||||||
#endif
|
#endif
|
||||||
SFR_REG_ADDRH = reg_addr >> 8;
|
SFR_REG_ADDR_U16 = reg_addr;
|
||||||
SFR_REG_ADDRL = reg_addr;
|
|
||||||
SFR_EXEC_GO = SFR_EXEC_READ_REG;
|
SFR_EXEC_GO = SFR_EXEC_READ_REG;
|
||||||
do {
|
do {
|
||||||
} while (SFR_EXEC_STATUS != 0);
|
} while (SFR_EXEC_STATUS != 0);
|
||||||
@@ -316,8 +316,8 @@ void reg_read_m(uint16_t reg_addr)
|
|||||||
void reg_write(uint16_t reg_addr)
|
void reg_write(uint16_t reg_addr)
|
||||||
{
|
{
|
||||||
/* Data to write must be in SFR A4, A5, A6, A7 */
|
/* Data to write must be in SFR A4, A5, A6, A7 */
|
||||||
SFR_REG_ADDRH = reg_addr >> 8;
|
SFR_REG_ADDR_U16 = reg_addr;
|
||||||
SFR_REG_ADDRL = reg_addr;
|
|
||||||
SFR_EXEC_GO = SFR_EXEC_WRITE_REG;
|
SFR_EXEC_GO = SFR_EXEC_WRITE_REG;
|
||||||
do {
|
do {
|
||||||
} while (SFR_EXEC_STATUS != 0);
|
} while (SFR_EXEC_STATUS != 0);
|
||||||
@@ -332,8 +332,8 @@ void reg_write_m(uint16_t reg_addr)
|
|||||||
print_byte(sfr_data[0]); print_byte(sfr_data[1]); print_byte(sfr_data[2]); print_byte(sfr_data[3]); write_char(' ');
|
print_byte(sfr_data[0]); print_byte(sfr_data[1]); print_byte(sfr_data[2]); print_byte(sfr_data[3]); write_char(' ');
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
SFR_REG_ADDRH = reg_addr >> 8;
|
SFR_REG_ADDR_U16 = reg_addr;
|
||||||
SFR_REG_ADDRL = reg_addr;
|
|
||||||
SFR_DATA_24 = sfr_data[0] ;
|
SFR_DATA_24 = sfr_data[0] ;
|
||||||
SFR_DATA_16 = sfr_data[1];
|
SFR_DATA_16 = sfr_data[1];
|
||||||
SFR_DATA_8 = sfr_data[2];
|
SFR_DATA_8 = sfr_data[2];
|
||||||
|
|||||||
Reference in New Issue
Block a user