diff options
author | Uros Majstorovic <majstor@majstor.org> | 2019-10-15 18:11:40 +0200 |
---|---|---|
committer | Uros Majstorovic <majstor@majstor.org> | 2019-10-15 18:11:40 +0200 |
commit | edec491d59697a635ddce7a19a870dd3e8d2f3ed (patch) | |
tree | 8b5c00103609eabe9fdc89169c825f544aca41d5 /code/fe310/eos/trap_entry.S | |
parent | 850ce8bb7a447e1d2500d5dac0b0003bb4412c37 (diff) |
event handler flags per evt subtype
timer has evt subtypes
i2s refactor
i2s has spk event
i2s fixed intr handler audio buf push
msgq fixed get message
Diffstat (limited to 'code/fe310/eos/trap_entry.S')
-rw-r--r-- | code/fe310/eos/trap_entry.S | 84 |
1 files changed, 54 insertions, 30 deletions
diff --git a/code/fe310/eos/trap_entry.S b/code/fe310/eos/trap_entry.S index 432e84a..650c45b 100644 --- a/code/fe310/eos/trap_entry.S +++ b/code/fe310/eos/trap_entry.S @@ -75,25 +75,26 @@ evtq_push: la x9, _eos_event_q lbu x18, MSGQ_OFF_IDXR(x9) lbu x19, MSGQ_OFF_IDXW(x9) - lbu x8, MSGQ_OFF_SIZE(x9) - + lbu x20, MSGQ_OFF_SIZE(x9) + sub x18, x19, x18 - beq x18, x8, 0f + andi x18, x18, 0xff + beq x18, x20, 0f - addi x8, x8, -1 - and x8, x8, x19 + addi x20, x20, -1 + and x20, x20, x19 li x18, MSGQ_ITEM_SIZE - mul x8, x8, x18 - lw x18, MSGQ_OFF_ARRAY(x9) - add x8, x8, x18 + mul x20, x20, x18 + lw x21, MSGQ_OFF_ARRAY(x9) + add x21, x21, x20 addi x19, x19, 1 sb x19, MSGQ_OFF_IDXW(x9) - jalr x0, x20 + jalr x0, x22 0: - mv x8, x0 - jalr x0, x20 + mv x20, x0 + jalr x0, x21 i2s_handler_sd: # exit if too early @@ -111,18 +112,41 @@ i2s_handler_sd: la x9, _eos_i2s_spk_buf lhu x18, I2S_ABUF_OFF_IDXR(x9) lhu x19, I2S_ABUF_OFF_IDXW(x9) + lhu x20, I2S_ABUF_OFF_SIZE(x9) + beq x18, x19, i2s_handler_sd_xchg - lhu x19, I2S_ABUF_OFF_SIZE(x9) - addi x19, x19, -1 - and x19, x19, x18 - lw x8, I2S_ABUF_OFF_ARRAY(x9) - add x19, x19, x8 - lbu x8, 0(x19) + addi x20, x20, -1 + and x20, x20, x18 + lw x21, I2S_ABUF_OFF_ARRAY(x9) + add x21, x21, x20 + lbu x8, 0(x21) addi x18, x18, 1 sh x18, I2S_ABUF_OFF_IDXR(x9) + + li x21, 0xffff + sub x18, x19, x18 + and x18, x18, x21 + + # check for push to event queue + la x9, _eos_i2s_spk_wm + lw x20, 0(x9) + beqz x20, i2s_decode + bgtu x18, x20, i2s_decode + + la x9, _eos_i2s_spk_evt_enable + lw x18, 0(x9) + beqz x18, i2s_decode + sw x0, 0(x9) + # push to event queue + jal x22, evtq_push + beqz x21, i2s_decode + li x18, (EOS_EVT_AUDIO | I2S_ETYPE_SPK) + sb x18, MSGQ_ITEM_OFF_TYPE(x21) + +i2s_decode: # aLaw decode -> x8 xori x8, x8, 0x55 andi x9, x8, 0x80 @@ -231,6 +255,7 @@ i2s_handler_sd_xchg: and x9, x9, x20 sw x9, GPIO_OUTPUT_EN(x18) +i2s_encode: # aLaw encode -> x8 li x18, 0x800 li x19, 7 @@ -270,36 +295,35 @@ i2s_handler_sd_xchg: sub x18, x19, x18 and x18, x18, x21 - beq x18, x20, 0f - - addi x19, x19, 1 - sh x19, I2S_ABUF_OFF_IDXW(x9) + beq x18, x20, i2s_handler_sd_exit addi x20, x20, -1 and x20, x20, x19 - lw x19, I2S_ABUF_OFF_ARRAY(x9) - add x20, x19, x20 + lw x21, I2S_ABUF_OFF_ARRAY(x9) + add x20, x21, x20 + + addi x19, x19, 1 + sh x19, I2S_ABUF_OFF_IDXW(x9) sb x8, 0(x20) addi x18, x18, 1 -0: # check for push to event queue - la x9, _eos_i2s_wm + la x9, _eos_i2s_mic_wm lw x20, 0(x9) beqz x20, i2s_handler_sd_exit bltu x18, x20, i2s_handler_sd_exit - la x9, _eos_i2s_evt_enable + la x9, _eos_i2s_mic_evt_enable lw x18, 0(x9) beqz x18, i2s_handler_sd_exit sw x0, 0(x9) # push to event queue - jal x20, evtq_push - beqz x8, i2s_handler_sd_exit - li x18, (EOS_EVT_AUDIO | I2S_EVT_MIC) - sb x18, MSGQ_ITEM_OFF_TYPE(x8) + jal x22, evtq_push + beqz x21, i2s_handler_sd_exit + li x18, (EOS_EVT_AUDIO | I2S_ETYPE_MIC) + sb x18, MSGQ_ITEM_OFF_TYPE(x21) i2s_handler_sd_exit: # complete |