Part Number: TMS570LC4357
Other Parts Discussed in Thread: HALCOGEN
Tool/software:
Hello experts,
I'm using the HET IDE to compile a .het file -- I essentially copy-pasted the "black-box" HALCoGen HET code from spna225. When I try to compile the code, I'm seeing the following error:
NHET Assembler Release 1.7
Texas Instruments Incorporated.
PASS 1
PASS 2
*** ERROR! line 187: E9999: [Syntax Error]
DPWM_2 PWCNT { next=PPWM_2, hr_lr=LOW, cond_addr=PPWM_2, pin=PIN_PWM2, action=POL_PWM2, reg=NONE, irq=OFF, data=DUTY_CNT2, hr_data=0};
*** ERROR! EOF: E0300: The following symbols are undefined:
DLOAD_0
DLOAD_1
PPWM_2
2 Errors, No Warnings
Errors in Source - Assembler Aborted
It is not clear to my why this error is occurring. I am attaching the file that I am trying to compile.
A related question: is the blackbox HET code used for the TMS570LC43xx in HALCoGen the same as the provided example for TMS570LS31xx?
;/**********************************************************************************************/
; This HET program corresponds to the HALCoGen generated HET code for TMS570LS31xx in default /
; configuration /
;/**********************************************************************************************/
;/----------------------------------------------------------------------------------------------/
;/ GUI CONFIGURATION /
;/----------------------------------------------------------------------------------------------/
; PWM Configuration Parameters
PIN_PWM0 .equ 8
DUTY_LOAD0 .equ 353
PERD_LOAD0 .equ 703
.asg "PULSEHI", POL_PWM0
.asg "OFF", ENABLE_PWM0
PIN_PWM1 .equ 10
DUTY_LOAD1 .equ 353
PERD_LOAD1 .equ 703
.asg "PULSEHI", POL_PWM1
.asg "OFF", ENABLE_PWM1
PIN_PWM2 .equ 12
DUTY_LOAD2 .equ 353
PERD_LOAD2 .equ 703
.asg "PULSEHI", POL_PWM2
.asg "OFF", ENABLE_PWM2
PIN_PWM3 .equ 14
DUTY_LOAD3 .equ 353
PERD_LOAD3 .equ 703
.asg "PULSEHI", POL_PWM3
.asg "OFF", ENABLE_PWM3
PIN_PWM4 .equ 16
DUTY_LOAD4 .equ 353
PERD_LOAD4 .equ 703
.asg "PULSEHI", POL_PWM4
.asg "OFF", ENABLE_PWM4
PIN_PWM5 .equ 17
DUTY_LOAD5 .equ 353
PERD_LOAD5 .equ 703
.asg "PULSEHI", POL_PWM5
.asg "OFF", ENABLE_PWM5
PIN_PWM6 .equ 18
DUTY_LOAD6 .equ 353
PERD_LOAD6 .equ 703
.asg "PULSEHI", POL_PWM6
.asg "OFF", ENABLE_PWM6
PIN_PWM7 .equ 19
DUTY_LOAD7 .equ 353
PERD_LOAD7 .equ 703
.asg "PULSEHI", POL_PWM7
.asg "OFF", ENABLE_PWM7
; EDGE Configuration Parameters
PIN_EDGE0 .equ 9
.asg "FALL", POL_EDGE0
PIN_EDGE1 .equ 11
.asg "FALL", POL_EDGE1
PIN_EDGE2 .equ 13
.asg "FALL", POL_EDGE2
PIN_EDGE3 .equ 15
.asg "FALL", POL_EDGE3
PIN_EDGE4 .equ 20
.asg "FALL", POL_EDGE4
PIN_EDGE5 .equ 21
.asg "FALL", POL_EDGE5
PIN_EDGE6 .equ 22
.asg "FALL", POL_EDGE6
PIN_EDGE7 .equ 23
.asg "FALL", POL_EDGE7
; CAPTURE Configuration Parameters
PIN_DUTYCAP0 .equ 0
PIN_PERDCAP0 .equ (PIN_DUTYCAP0+1)
.asg "FALL2RISE", POL_DCAP0
.if $symcmp( POL_DCAP0, "FALL2RISE" )
.asg "RISE2RISE", POL_PCAP0
.else
.asg "FALL2FALL", POL_PCAP0
.endif
PIN_DUTYCAP1 .equ 2
PIN_PERDCAP1 .equ (PIN_DUTYCAP1+1)
.asg "FALL2RISE", POL_DCAP1
.if $symcmp( POL_DCAP1, "FALL2RISE" )
.asg "RISE2RISE", POL_PCAP1
.else
.asg "FALL2FALL", POL_PCAP1
.endif
PIN_DUTYCAP2 .equ 4
PIN_PERDCAP2 .equ (PIN_DUTYCAP2+1)
.asg "FALL2RISE", POL_DCAP2
.if $symcmp( POL_DCAP2, "FALL2RISE" )
.asg "RISE2RISE", POL_PCAP2
.else
.asg "FALL2FALL", POL_PCAP2
.endif
PIN_DUTYCAP3 .equ 6
PIN_PERDCAP3 .equ (PIN_DUTYCAP3+1)
.asg "FALL2RISE", POL_DCAP3
.if $symcmp( POL_DCAP3, "FALL2RISE" )
.asg "RISE2RISE", POL_PCAP3
.else
.asg "FALL2FALL", POL_PCAP3
.endif
PIN_DUTYCAP4 .equ 24
PIN_PERDCAP4 .equ (PIN_DUTYCAP4+1)
.asg "FALL2RISE", POL_DCAP4
.if $symcmp( POL_DCAP4, "FALL2RISE" )
.asg "RISE2RISE", POL_PCAP4
.else
.asg "FALL2FALL", POL_PCAP4
.endif
PIN_DUTYCAP5 .equ 26
PIN_PERDCAP5 .equ (PIN_DUTYCAP5+1)
.asg "FALL2RISE", POL_DCAP5
.if $symcmp( POL_DCAP5, "FALL2RISE" )
.asg "RISE2RISE", POL_PCAP5
.else
.asg "FALL2FALL", POL_PCAP5
.endif
PIN_DUTYCAP6 .equ 28
PIN_PERDCAP6 .equ (PIN_DUTYCAP6+1)
.asg "FALL2RISE", POL_DCAP6
.if $symcmp( POL_DCAP6, "FALL2RISE" )
.asg "RISE2RISE", POL_PCAP6
.else
.asg "FALL2FALL", POL_PCAP6
.endif
PIN_DUTYCAP7 .equ 30
PIN_PERDCAP7 .equ (PIN_DUTYCAP7+1)
.asg "FALL2RISE", POL_DCAP7
.if $symcmp( POL_DCAP7, "FALL2RISE" )
.asg "RISE2RISE", POL_PCAP7
.else
.asg "FALL2FALL", POL_PCAP7
.endif
;/----------------------------------------------------------------------------------------------/
;/ ADDITIONAL CONFIGURATION /
;/----------------------------------------------------------------------------------------------/
; The following configuration options are not available in the HALCoGen GUI. The default values
; here are hard-coded in the actual HALCoGen black-box driver.
PERD_CNT0 .equ 0
DUTY_CNT0 .equ 0
.asg "ON", EOD_IRQ0
.asg "ON", EOP_IRQ0
PERD_CNT1 .equ 0
DUTY_CNT1 .equ 0
.asg "ON", EOD_IRQ1
.asg "ON", EOP_IRQ1
PERD_CNT2 .equ 0
DUTY_CNT .equ 0
.asg "ON", EOD_IRQ2
.asg "ON", EOP_IRQ2
PERD_CNT3 .equ 0
DUTY_CNT .equ 0
.asg "ON", EOD_IRQ3
.asg "ON", EOP_IRQ3
PERD_CNT4 .equ 0
DUTY_CNT4 .equ 0
.asg "ON", EOD_IRQ4
.asg "ON", EOP_IRQ4
PERD_CNT5 .equ 0
DUTY_CNT5 .equ 0
.asg "ON", EOD_IRQ5
.asg "ON", EOP_IRQ5
PERD_CNT6 .equ 0
DUTY_CNT6 .equ 0
.asg "ON", EOD_IRQ6
.asg "ON", EOP_IRQ6
PERD_CNT7 .equ 0
DUTY_CNT7 .equ 0
.asg "ON", EOD_IRQ7
.asg "ON", EOP_IRQ7
;/----------------------------------------------------------------------------------------------/
;/ INSTRUCTIONS /
;/----------------------------------------------------------------------------------------------/
; The N2HET loop starts at FIRST_INS instruction
; Global CNT instruction
FIRST_INS CNT { next=DPWM_0,reg=T,comp=EQ,irq=OFF,max=33554431,data=33554431};
; DPWM_0 to PPWM_7 are instructions to produce PWM signals
DPWM_0 PWCNT { next=PPWM_0,hr_lr=LOW,cond_addr=PPWM_0,pin=PIN_PWM0,action=POL_PWM0,reg=NONE, irq=OFF, data=DUTY_CNT0, hr_data=0};
PPWM_0 DJZ { next=DPWM_1, cond_addr=DLOAD_0, reg=NONE, irq=OFF, data=PERD_CNT0};
DPWM_1 PWCNT { next=PPWM_1, hr_lr=LOW, cond_addr=PPWM_1, pin=PIN_PWM1, action=POL_PWM1, reg=NONE, irq=OFF, data=DUTY_CNT1, hr_data=0};
PPWM_1 DJZ { next=DPWM_2, cond_addr=DLOAD_1, reg=NONE, irq=OFF, data=PERD_CNT1};
DPWM_2 PWCNT { next=PPWM_2, hr_lr=LOW, cond_addr=PPWM_2, pin=PIN_PWM2, action=POL_PWM2, reg=NONE, irq=OFF, data=DUTY_CNT2, hr_data=0};
PPWM_2 DJZ { next=DPWM_3, cond_addr=DLOAD_2, reg=NONE, irq=OFF, data=PERD_CNT2};
DPWM_3 PWCNT { next=PPWM_3, hr_lr=LOW, cond_addr=PPWM_3, pin=PIN_PWM3, action=POL_PWM3, reg=NONE, irq=OFF, data=DUTY_CNT3, hr_data=0};
PPWM_3 DJZ { next=DPWM_4, cond_addr=DLOAD_3, reg=NONE, irq=OFF, data=PERD_CNT3};
DPWM_4 PWCNT { next=PPWM_4, hr_lr=LOW, cond_addr=PPWM_4, pin=PIN_PWM4, action=POL_PWM4, reg=NONE, irq=OFF, data=DUTY_CNT4, hr_data=0};
PPWM_4 DJZ { next=DPWM_5, cond_addr=DLOAD_4, reg=NONE, irq=OFF, data=PERD_CNT4};
DPWM_5 PWCNT { next=PPWM_5, hr_lr=LOW, cond_addr=PPWM_5, pin=PIN_PWM5, action=POL_PWM5, reg=NONE, irq=OFF, data=DUTY_CNT5, hr_data=0};
PPWM_5 DJZ { next=DPWM_6, cond_addr=DLOAD_5, reg=NONE, irq=OFF, data=PERD_CNT5};
DPWM_6 PWCNT { next=PPWM_6, hr_lr=LOW, cond_addr=PPWM_6, pin=PIN_PWM6, action=POL_PWM6, reg=NONE, irq=OFF, data=DUTY_CNT6, hr_data=0};
PPWM_6 DJZ { next=DPWM_7, cond_addr=DLOAD_6, reg=NONE, irq=OFF, data=PERD_CNT6};
DPWM_7 PWCNT { next=PPWM_7, hr_lr=LOW, cond_addr=PPWM_7, pin=PIN_PWM7, action=POL_PWM7, reg=NONE, irq=OFF, data=DUTY_CNT7, hr_data=0};
PPWM_7 DJZ { next=EDGE_0, cond_addr=DLOAD_7, reg=NONE, irq=OFF, data=PERD_CNT7};
; EDGE0 to EDGE7 are for Edge capturing and counting
EDGE_0 ECNT { next=EDGE_1, cond_addr=EDGE_1, pin=PIN_EDGE0, event=POL_EDGE0, reg=NONE, irq=ON, data=0};
EDGE_1 ECNT { next=EDGE_2, cond_addr=EDGE_2, pin=PIN_EDGE1, event=POL_EDGE1, reg=NONE, irq=ON, data=0};
EDGE_2 ECNT { next=EDGE_3, cond_addr=EDGE_3, pin=PIN_EDGE2, event=POL_EDGE2, reg=NONE, irq=ON, data=0};
EDGE_3 ECNT { next=EDGE_4, cond_addr=EDGE_4, pin=PIN_EDGE3, event=POL_EDGE3, reg=NONE, irq=ON, data=0};
EDGE_4 ECNT { next=EDGE_5, cond_addr=EDGE_5, pin=PIN_EDGE4, event=POL_EDGE4, reg=NONE, irq=ON, data=0};
EDGE_5 ECNT { next=EDGE_6, cond_addr=EDGE_6, pin=PIN_EDGE5, event=POL_EDGE5, reg=NONE, irq=ON, data=0};
EDGE_6 ECNT { next=EDGE_7, cond_addr=EDGE_7, pin=PIN_EDGE6, event=POL_EDGE6, reg=NONE, irq=ON, data=0};
EDGE_7 ECNT { next=DUTYCAP_0, cond_addr=DUTYCAP_0, pin=PIN_EDGE7, event=POL_EDGE7, reg=NONE, irq=ON, data=0};
; DUTYCAP_0 to PERDCAP_7 are for Signal Capture and Measurement
DUTYCAP_0 PCNT { next=PERDCAP_0, irq=OFF, type=POL_DCAP0, pin=PIN_DUTYCAP0, period=0, data=0};
PERDCAP_0 PCNT { next=DUTYCAP_1, irq=OFF, type=POL_PCAP0, pin=PIN_PERDCAP0, period=0, data=0};
DUTYCAP_1 PCNT { next=PERDCAP_1, irq=OFF, type=POL_DCAP1, pin=PIN_DUTYCAP1, period=0, data=0};
PERDCAP_1 PCNT { next=DUTYCAP_2, irq=OFF, type=POL_PCAP1, pin=PIN_PERDCAP1, period=0, data=0};
DUTYCAP_2 PCNT { next=PERDCAP_2, irq=OFF, type=POL_DCAP2, pin=PIN_DUTYCAP2, period=0, data=0};
PERDCAP_2 PCNT { next=DUTYCAP_3, irq=OFF, type=POL_PCAP2, pin=PIN_PERDCAP2, period=0, data=0};
DUTYCAP_3 PCNT { next=PERDCAP_3, irq=OFF, type=POL_DCAP3, pin=PIN_DUTYCAP3, period=0, data=0};
PERDCAP_3 PCNT { next=DUTYCAP_4, irq=OFF, type=POL_PCAP3, pin=PIN_PERDCAP3, period=0, data=0};
DUTYCAP_4 PCNT { next=PERDCAP_4, irq=OFF, type=POL_DCAP4, pin=PIN_DUTYCAP4, period=0, data=0};
PERDCAP_4 PCNT { next=DUTYCAP_5, irq=OFF, type=POL_PCAP4, pin=PIN_PERDCAP4, period=0, data=0};
DUTYCAP_5 PCNT { next=PERDCAP_5, irq=OFF, type=POL_DCAP5, pin=PIN_DUTYCAP5, period=0, data=0};
PERDCAP_5 PCNT { next=DUTYCAP_6, irq=OFF, type=POL_PCAP5, pin=PIN_PERDCAP5, period=0, data=0};
DUTYCAP_6 PCNT { next=PERDCAP_6, irq=OFF, type=POL_DCAP6, pin=PIN_DUTYCAP6, period=0, data=0};
PERDCAP_6 PCNT { next=DUTYCAP_7, irq=OFF, type=POL_PCAP6, pin=PIN_PERDCAP6, period=0, data=0};
DUTYCAP_7 PCNT { next=PERDCAP_7, irq=OFF, type=POL_DCAP7, pin=PIN_DUTYCAP7, period=0, data=0};
PERDCAP_7 PCNT { next=TSTMP, irq=OFF, type=POL_PCAP7, pin=PIN_PERDCAP7, period=0, data=0};
; DLOAD_0 to PLOAD_7 are for updating the instructions DPWM_0 to PPWM_7 when the DJZ counts reach zero(i.e. one time period ends)
DLOAD_0 MOV64 { next=PLOAD_0, remote=DPWM_0, en_pin_action=ENABLE_PWM0, cond_addr=PPWM_0, pin=PIN_PWM0, comp_mode=ECMP, action=POL_PWM0, reg=NONE, irq=EOD_IRQ0, data=DUTY_LOAD0};
PLOAD_0 MOV64 { next=DPWM_1, remote=PPWM_0, cond_addr=DLOAD_0, comp_mode=ECMP, reg=NONE, irq=EOP_IRQ0, data=PERD_LOAD0};
DLOAD_1 MOV64 { next=PLOAD_1, remote=DPWM_1, en_pin_action=ENABLE_PWM1, cond_addr=PPWM_1, pin=PIN_PWM1, comp_mode=ECMP, action=POL_PWM1, reg=NONE, irq=EOD_IRQ1, data=DUTY_LOAD1};
PLOAD_1 MOV64 { next=DPWM_2, remote=PPWM_1, cond_addr=DLOAD_1, comp_mode=ECMP, reg=NONE, irq=EOP_IRQ1, data=PERD_LOAD1};
DLOAD_2 MOV64 { next=PLOAD_2, remote=DPWM_2, en_pin_action=ENABLE_PWM2, cond_addr=PPWM_2, pin=PIN_PWM2, comp_mode=ECMP, action=POL_PWM2, reg=NONE, irq=EOD_IRQ2, data=DUTY_LOAD2};
PLOAD_2 MOV64 { next=DPWM_3, remote=PPWM_2, cond_addr=DLOAD_2, comp_mode=ECMP, reg=NONE, irq=EOP_IRQ2, data=PERD_LOAD2};
DLOAD_3 MOV64 { next=PLOAD_3, remote=DPWM_3, en_pin_action=ENABLE_PWM3, cond_addr=PPWM_3, pin=PIN_PWM3, comp_mode=ECMP, action=POL_PWM3, reg=NONE, irq=EOD_IRQ3, data=DUTY_LOAD3};
PLOAD_3 MOV64 { next=DPWM_4, remote=PPWM_3, cond_addr=DLOAD_3, comp_mode=ECMP, reg=NONE, irq=EOP_IRQ3, data=PERD_LOAD3};
DLOAD_4 MOV64 { next=PLOAD_4, remote=DPWM_4, en_pin_action=ENABLE_PWM4, cond_addr=PPWM_4, pin=PIN_PWM4, comp_mode=ECMP, action=POL_PWM4, reg=NONE, irq=EOD_IRQ4, data=DUTY_LOAD4};
PLOAD_4 MOV64 { next=DPWM_5, remote=PPWM_4, cond_addr=DLOAD_4, comp_mode=ECMP, reg=NONE, irq=EOP_IRQ4, data=PERD_LOAD4};
DLOAD_5 MOV64 { next=PLOAD_5, remote=DPWM_5, en_pin_action=ENABLE_PWM5, cond_addr=PPWM_5, pin=PIN_PWM5, comp_mode=ECMP, action=POL_PWM5, reg=NONE, irq=EOD_IRQ5, data=DUTY_LOAD5};
PLOAD_5 MOV64 { next=DPWM_6, remote=PPWM_5, cond_addr=DLOAD_5, comp_mode=ECMP, reg=NONE, irq=EOP_IRQ5, data=PERD_LOAD5};
DLOAD_6 MOV64 { next=PLOAD_6, remote=DPWM_6, en_pin_action=ENABLE_PWM6, cond_addr=PPWM_6, pin=PIN_PWM6, comp_mode=ECMP, action=POL_PWM6, reg=NONE, irq=EOD_IRQ6, data=DUTY_LOAD6};
PLOAD_6 MOV64 { next=DPWM_7, remote=PPWM_6, cond_addr=DLOAD_6, comp_mode=ECMP, reg=NONE, irq=EOP_IRQ6, data=PERD_LOAD6};
DLOAD_7 MOV64 { next=PLOAD_7, remote=DPWM_7, en_pin_action=ENABLE_PWM7, cond_addr=PPWM_7, pin=PIN_PWM7, comp_mode=ECMP, action=POL_PWM7, reg=NONE, irq=EOD_IRQ7, data=DUTY_LOAD7};
PLOAD_7 MOV64 { next=EDGE_0, remote=PPWM_7, cond_addr=DLOAD_7, comp_mode=ECMP, reg=NONE, irq=EOP_IRQ7, data=PERD_LOAD7};
; TSTMP is for time-stamping
TSTMP WCAP { next=FIRST_INS, cond_addr=FIRST_INS, pin=0, event=NOCOND, reg=T, data=0};
; Instruction TSTMP points back to instruction FIRST_INS and the loop restarts
;/***********************************************************************************************/
;/ END OF FILE /
;/***********************************************************************************************/
Thanks!