remove motor_control folder from the repository Fixes: PINDSW-5635 Signed-off-by: Naresh A <nareshk@ti.com>
104 lines
5.3 KiB
NASM
104 lines
5.3 KiB
NASM
;
|
|
; 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.
|
|
;
|
|
|
|
.cdecls C,NOLIST
|
|
%{
|
|
#include "icssg_sddf.h"
|
|
%}
|
|
.include "sddf_cfg.h"
|
|
|
|
|
|
; Initial FW register values
|
|
; SDDF_EN=0, PRU_ID=uninitialized
|
|
INIT_SDDF_CTRL .set (SDDF_EN << SDDF_CTRL_BF_SDDF_EN_SHIFT) | (PRU_ID << SDDF_CTRL_BF_PRU_ID_SHIFT)
|
|
; SDDF_EN_ACK=0, PRU_ID_ACK=uninitialized
|
|
INIT_SDDF_STAT .set (SDDF_EN_ACK << SDDF_STAT_BF_SDDF_EN_ACK_SHIFT) | (PRU_ID_ACK << SDDF_STAT_BF_PRU_ID_ACK_SHIFT)
|
|
; IEP0 default increment=1
|
|
INIT_IEP_CFG .set (IEP_DEFAULT_INC << IEP_CFG_BF_IEP_DEFAULT_INC_SHIFT)
|
|
; IEP0 CMP0 count to simulate EPWM (FOC loop) period:
|
|
; - IEP frequency = 300 MHz
|
|
; - IEP Default Increment = 1
|
|
; - Simulated EPWM frequency = 8e3
|
|
; CMP0 = 300e6/1/8e3 = 37500 = 0x927C
|
|
; CMP3 = 300e6/16e3 = 18,750 = 0x493E
|
|
INIT_IEP_CFG_CMP0_CNT_EPWM_PRD .set (CMP0_CNT_EPWM_PRD << IEP_CFG_BF_CMP0_CNT_EPWM_PRD_SHIFT)
|
|
; SD Ch0 ID=0, Ch1 ID=1, Ch2 ID=2
|
|
INIT_SDDF_CFG_SD_CH_ID .set (SD_CH0_ID << SDDF_CFG_BF_SD_CH0_ID_SHIFT) | (SD_CH1_ID << SDDF_CFG_BF_SD_CH1_ID_SHIFT) | (SD_CH2_ID << SDDF_CFG_BF_SD_CH2_ID_SHIFT)
|
|
; SD_PRD_CLOCKS=10 => 20 MHz SD clock, SD_CLK_INV==0 => No clock inversion
|
|
INIT_SDDF_CFG_SD_CLK .set (SD_PRD_CLOCKS << SDDF_CFG_SD_CLK_BF_SD_PRD_CLOCKS_SHIFT) | (SD_CLK_INV << SDDF_CFG_SD_CLK_BF_SD_CLK_INV_SHIFT)
|
|
; SD OC OSR=(13+1)=14
|
|
INIT_SDDF_CFG_OSR .set (OC_OSR << SDDF_CFG_OC_OSR_BF_OSR_SHIFT)
|
|
; SD OC positive threshold = (OC OSR)^(OC SINC ORDER) = 14^3 = 2744
|
|
INIT_SDDF_CFG_OC_POS_THR .set (OC_POS_THR << SDDF_CFG_OC_POS_THR_SHIFT)
|
|
; SD OC negative threshold = 1
|
|
INIT_SDDF_CFG_OC_NEG_THR .set (OC_NEG_THR << SDDF_CFG_OC_NEG_THR_SHIFT)
|
|
; For SD samp freq==20e6, OSR==64, EPWM (FOC) loop freq = 8e3, sddf_setup_time=0 (TBD) &
|
|
; IEP freq = 300e6, IEP counter increment=1:
|
|
; (1/2*(1/8e3) - 3/2*(64/20e6) - 0)*300e6*1 = 17310
|
|
; ()
|
|
;
|
|
;for 16KHz (1/2*(1/16e3)-3/2*(64/20e6)-0)*300e6 = 7935
|
|
;for
|
|
INIT_SDDF_CFG_TRIG_SAMP_TIME .set (TRIG_SAMP_TIME << SDDF_CFG_TRIG_SAMP_TIME_BF_TRIG_SAMP_TIME_SHIFT)
|
|
; Generate 3 NC samples after trigger
|
|
INIT_SDDF_CFG_TRIG_SAMP_CNT .set (TRIG_SAMP_CNT << SDDF_CFG_TRIG_SAMP_CNT_BF_TRIG_SAMP_CNT_SHIFT)
|
|
; IEP0 counts in NC sampling period:
|
|
; - IEP0 count =
|
|
; (NC OSR * SD clock period)*(IEP0 frequency * IEP default count) =
|
|
; (NC OSR * IEP0 frequency * IEP default count)/(SD clock frequency) =
|
|
; 64*300e6*1/20e6 = 960
|
|
; for NC OSR = 128
|
|
; 128*15 = 1920
|
|
; 256*15 = 3840
|
|
INIT_SDDF_CFG_NC_PRD_IEP_CNT .set (NC_PRD_IEP_CNT << SDDF_CFG_NC_PRD_IEP_CNT_SHIFT)
|
|
INIT_SDDF_CFG_OUT_SAMP_BUF .set (NC_OUT_SAMP_BUF << SDDF_CFG_NC_OUT_SAMP_BUF_BF_NC_OUT_SAMP_BUF_SHIFT)
|
|
|
|
; SDDF Firmware Registers
|
|
.sect ".fwRegs"
|
|
.retain ".fwRegs"
|
|
.retainrefs ".fwRegs"
|
|
.byte INIT_SDDF_CTRL
|
|
.byte INIT_SDDF_STAT
|
|
.byte INIT_IEP_CFG
|
|
.byte 0 ; RESERVED
|
|
.word INIT_IEP_CFG_CMP0_CNT_EPWM_PRD
|
|
.word INIT_SDDF_CFG_SD_CH_ID
|
|
.short INIT_SDDF_CFG_SD_CLK
|
|
.byte INIT_SDDF_CFG_OSR
|
|
.byte 0 ; RESERVED
|
|
.short INIT_SDDF_CFG_OC_POS_THR
|
|
.short INIT_SDDF_CFG_OC_NEG_THR
|
|
.word INIT_SDDF_CFG_TRIG_SAMP_TIME
|
|
.short INIT_SDDF_CFG_TRIG_SAMP_CNT
|
|
.short INIT_SDDF_CFG_NC_PRD_IEP_CNT
|
|
.word INIT_SDDF_CFG_OUT_SAMP_BUF
|