sound-experiment-02/gen-driver.S

73 lines
1.4 KiB
ArmAsm

#include <msp430g2553.h>
#define DATA_REGISTER r13
#define CHIP_ID_REGISTER r12
#define PORT_REG P1OUT
#define PORT_SID_BIT BIT0
#define PORT_SCK_BIT BIT1
#define PORT_LATI0_BIT BIT2
#define PORT_LATI1_BIT BIT3
.macro set_data_bit
bic #PORT_SID_BIT, &PORT_REG
.endm
.macro clear_data_bit
bis #PORT_SID_BIT, &PORT_REG
.endm
.macro clock_cycle
bic #PORT_SCK_BIT, &PORT_REG
bis #PORT_SCK_BIT, &PORT_REG
.endm
.macro lati_cycle chip
bic #\chip\(), &PORT_REG
bis #\chip\(), &PORT_REG
.endm
.macro data_cycle id
genShifter_\id\():
rla.w DATA_REGISTER
jnc genShifter_false_\id\()
set_data_bit
jmp genShifter_clock_\id\()
genShifter_false_\id\():
clear_data_bit
genShifter_clock_\id\():
clock_cycle
.endm
.section ".text","ax",@progbits
.global genShifter
genShifter:
// arguments
// R12 aka CHIP_ID_REGISTER: chip id, 0 or 1
// R13 aka DATA_REGISTER: frequency code, full 16 bit
data_cycle 0
data_cycle 1
data_cycle 2
data_cycle 3
data_cycle 4
data_cycle 5
data_cycle 6
data_cycle 7
data_cycle 8
data_cycle 9
data_cycle a
data_cycle b
data_cycle c
data_cycle d
data_cycle e
data_cycle f
tst.w CHIP_ID_REGISTER
jnz genShifter_chip_1
lati_cycle PORT_LATI0_BIT
genShifter_chip_1:
lati_cycle PORT_LATI1_BIT
ret