- Add support for trigger based sampling by using IEP compare events - Add support for double update per PWM cycle - Fixed the IEP compare event hit value calculation - Tested with SDFM clock input from EPWM Fixes: PINDSW-5522, PINDSW-6544, PINDSW-6546 Signed-off-by: Achala Ram <a-ram@ti.com>
118 lines
4.0 KiB
C
118 lines
4.0 KiB
C
;
|
|
; sdfm_macros.h
|
|
;
|
|
; Copyright (c) 2023, Texas Instruments Incorporated
|
|
; All rights reserved.
|
|
;
|
|
; Redistribution and use in source and binary forms, with or without
|
|
; modification, are permitted provided that the following conditions
|
|
; are met:
|
|
;
|
|
; * Redistributions of source code must retain the above copyright
|
|
; notice, this list of conditions and the following disclaimer.
|
|
;
|
|
; * Redistributions in binary form must reproduce the above copyright
|
|
; notice, this list of conditions and the following disclaimer in the
|
|
; documentation and/or other materials provided with the distribution.
|
|
;
|
|
; * Neither the name of Texas Instruments Incorporated nor the names of
|
|
; its contributors may be used to endorse or promote products derived
|
|
; from this software without specific prior written permission.
|
|
;
|
|
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
; THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
; OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
; EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
;
|
|
|
|
.if !$defined("__sdfm_macros_h")
|
|
__sdfm_macros_h .set 1
|
|
|
|
.include "sdfm.h"
|
|
|
|
;
|
|
; Macros
|
|
;
|
|
;
|
|
|
|
WRITE_C24_BLK_INDEX .macro blk_index
|
|
; Set DMEM (C24) block offset
|
|
LDI TEMP_REG0.b0, blk_index
|
|
SBCO &TEMP_REG0.b0, CT_PRU_ICSSG_CTRL, PRUx_CNTLSELF_CONST_IDX0_REG, 1
|
|
NOP ; delay for update to land?
|
|
.endm
|
|
|
|
|
|
; Set SD HW registers base pointer
|
|
SET_SD_HW_REG_BASE_PTR .macro base_ptr
|
|
; Load TR0.b0 <- FW_REG_SDFM_CTRL
|
|
LBCO &TEMP_REG0.b0, CT_PRU_ICSSG_LOC_DMEM, SDFM_PRU_ID_OFFSET, SDFM_PRU_ID_SZ
|
|
; Check PRU ID 0 or 1
|
|
QBEQ pru_id1?, TEMP_REG0.b0, 1
|
|
pru_id0?:
|
|
LDI32 base_ptr, PRUx_CFG_BASE+ICSSG_CFG_PRU0_SD0_CLK
|
|
QBA set_sd_hw_reg_base_ptr_end?
|
|
pru_id1?:
|
|
LDI32 base_ptr, PRUx_CFG_BASE+ICSSG_CFG_PRU1_SD0_CLK
|
|
set_sd_hw_reg_base_ptr_end?:
|
|
.endm
|
|
|
|
; Configure Triggered mode sample count
|
|
;CFG_TRIG_MODE_SAMP_CNT .macro samp_cnt
|
|
; Load samp_cnt <- SDFM_CFG_TRIG_SAMPLE_CNT
|
|
; LBCO &samp_cnt, CT_PRU_ICSSG_LOC_DMEM, FW_REG_SDFM_CFG_TRIG_SAMPLE_CNT, FW_REG_SDFM_CFG_TRIG_SAMPLE_CNT_SZ
|
|
; .endm
|
|
|
|
; Wait until shadow flag of the channel is set & clear the flag
|
|
; args - ch_idx : SD channel index {0...ICSSG_NUM_SD_CH-1}
|
|
;; updates - TEMP_REG0.w2 : channel sample buffer offset
|
|
;
|
|
M_WAIT_SHADOW_FLAG_AND_CLR .macro ch_idx
|
|
; Place ch_idx in R30[29-26], channel_select
|
|
LSL TEMP_REG1.b0, ch_idx, 2
|
|
SET TEMP_REG1.b0.t1
|
|
MOV R30.b3, TEMP_REG1.b0
|
|
NOP
|
|
|
|
wait_for_shadow_update_cont?:
|
|
; R31[24], shadow_update_flag for ICSS
|
|
; R31[28], shadow_update_flag for ICSSG
|
|
QBBC wait_for_shadow_update_cont?, R31, 28
|
|
; R31[24], shadow_update_flag_clr for ICSS/ICSSG
|
|
SET R31, R31.t24
|
|
.endm
|
|
|
|
.endif ; __sdfm_macros_h
|
|
|
|
; Calculates Sinc3 sample value from ACC3 & Sinc3 variables
|
|
; args - DN1, DN3, DN5 : Sinc3 differntiator state variables
|
|
; expects - ACC3 value in DN0, mask in MASK_REG
|
|
; uses - CN3, CN4, CN5
|
|
; result - CN5 : Output sample
|
|
;
|
|
M_ACC3_PROCESS .macro DN1, DN3, DN5
|
|
RSB CN3, DN1, DN0
|
|
MOV DN1, DN0
|
|
RSB CN4, DN3, CN3
|
|
MOV DN3, CN3
|
|
RSB CN5, DN5, CN4
|
|
MOV DN5, CN4
|
|
AND CN5, CN5, MASK_REG ; apply limit
|
|
.endm
|
|
|
|
;Enable task manager
|
|
M_PRU_TM_ENABLE .macro
|
|
tsen 1
|
|
.endm
|
|
|
|
;Disable task manager
|
|
M_PRU_TM_DISABLE .macro
|
|
tsen 0
|
|
.endm |