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!