📄 main.asm
字号:
;==================================================================================
; Project Name : SPMC65P2404A for BLDC motor demo board
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : interrupt service routine
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;==================================================================================
; * Function selection *
;
; Notice: Mark it to cancel its function (;U_Help_Mode) --> Disable Help_Mode
;==================================================================================
U_Electric_Break .DEFL 1 ;select brake function
U_Help_Mode .DEFL 1 ;select help function
U_ConsSpeed .DEFL 1 ;select constant function
U_UnderVCheck .DEFL 1 ;select low battery function
U_Mosfet_Check .DEFL 1 ;select mos check function
;U_HallInputMode .DEFL 1 ;select 120 degree / 60 degree
U_PWM_Compresense .DEFL 1 ;select pwm compresense
U_BatterChage_Mode .DEFL 1 ;select batter charge function
U_MotoStopUp_Mode .DEFL 1 ;select moto stopup function
U_HallBar_Detect .DEFL 1
U_Modulate_Enable .DEFL 1
U_Alarm_Mode .DEFL 1
U_RollBack .DEFL 1 ;rollback
;=====================================================================================
.SYNTAX 6502 ; Process standard 6502 addressing syntax
.LINKLIST ; Generate linklist information
.SYMBOLS ; Generate symbolic debug information
;****************************************
;* *
;* System Register Define *
;* *
;****************************************
.INCLUDE SPMC65P2404A.inc ; Define all hardware,Registers and ports.
.INCLUDE SPMC65_CON.inc
.INCLUDE SPMC65_SFR.inc
.EXTERNAL F_SixStepWave
.EXTERNAL F_InitMos_Check
.EXTERNAL F_Delay5ms
.EXTERNAL F_Delay1sec
.EXTERNAL F_Brake_Control
.EXTERNAL F_Motor_StopUp_Control
.EXTERNAL F_MotorStop_Control
.EXTERNAL F_BatteryCharge_Control
.EXTERNAL F_DutyCmdUpdate
.EXTERNAL F_Pwm_Renew_Process
.EXTERNAL F_Close_Timer0
.EXTERNAL L_Alarm_Work_Process
;****************************************
;* *
;* Data memory Define *
;* *
;****************************************
.PAGE0
;======================
;main area
;======================
G_Time_Slot DS 1 ; task counter
Gw_Pc_Reg DS 2 ; task counter
;
;============================================
;Ini area for MOSFET CHECK variable
;============================================
G_Mos_Num DS 1 ; MOSFET Check
G_Mos_Num_Temp DS 1 ; MOSFET Check
G_Test_Num DS 1 ; MOSFET Check
G_Delay_Count DS 1 ; MOSFET Check
G_Under_Test DS 1 ; MOSFET Check
;============================================
;ad area
;============================================
G_ADC7_Buf DS 1 ; valtage ad result
G_Speed_AD_Buf DS 2 ; speed ad buffer
G_Speed_AD_Old DS 1 ; speed old ad
; ; ADaverage=AD(n-1)*(N-1)+ADn/N
;=====================
;8Bit muilt 8bit area
;=====================
G_Multed0 DS 1
G_Multed1 DS 1
G_Mult0 DS 1
G_Mul_Out0 DS 1
G_Mul_Out1 DS 1
;
;======================
;16Bit divide 8Bit area
;======================
G_Shift DS 1
G_Divided0 DS 1
G_Divided1 DS 1
G_Divided2 DS 1
G_Divid0 DS 1
;
;======================
;time area
;======================
G_4Ms_Count DS 1 ;4ms count
G_20Ms_Count DS 1 ;20ms count
G_250Ms_Count DS 1 ;250ms count
G_500Ms_Count DS 1 ;500ms count
G_1250Ms_Count DS 1 ;1250ms count
G_1s_Count DS 1 ;1s count
G_2S_Count DS 1 ;2s count
G_3S_Count DS 1 ;3s count
G_1Min_Count DS 1 ;1min count
;
;======================
;prottect area
;======================
G_Iover_Time DS 1 ;used for I over time count
G_Batter_Low_Time DS 1 ;used for batter low time count
G_BatterLowStart_Time DS 1
G_TMB_Delay_Cnt DS 1 ;NMI int delay time cout
;
;======================
;help comand area
;======================
G_Help0_count DS 2 ;used for count help 0
G_Help1_count DS 2 ;used for count help 1
G_Help_Comand DS 2 ;used for count help comand
G_Help_Comand_BufferLo ds 4 ;;hlp 05/29
G_Help_Comand_BufferHi DS 4
G_Help_Buffer DS 2
G_Help1_count_Time DS 1 ;used for count help comand
G_Help_SpeedMode_Count DS 1
G_HallStart_Count DS 1
;======================
;display area
;======================
G_DISP_FLAG DS 1 ;used for display ERROR ERROR_LED
;======================
;hz2006-5-5
;======================
G_AD4_Queue: DS 4
G_AD6_Queue: DS 4
G_AD7_Queue: DS 4
G_AD_QueueADD DS 2
G_AD_Register DS 1 ; adn buffer
G_Temp_0: DS 1
G_Temp_1: DS 1
G_Temp_2: DS 1
G_Temp_3: DS 1
;==================
;pwm compress area
;==================
G_PwmCompressIOverBuf DS 1 ; G_PwmCompressLimitBuf
G_PwmCompressMaxBuf DS 1 ; if AD6<5EH no pwm compress
G_60DgreePwmCompressMinBuf DS 1 ; 60 dgree delay ,time base 3 us
G_120DgreePwmCompressMinBuf DS 1 ; 120 dgree delay ,time base 3 us
;==================
;Alarm area
;==================
G_Alarm_Cnt DS 1
Hall_Alarm_Pos DS 1
G_Alarm_Hall_Cnt DS 1
.PUBLIC G_PwmCompressIOverBuf ; G_PwmCompressLimitBuf
.PUBLIC G_PwmCompressMaxBuf ; if AD6<5EH no pwm compress
.PUBLIC G_60DgreePwmCompressMinBuf ; 60 dgree delay ,time base 3 us
.PUBLIC G_120DgreePwmCompressMinBuf ; 120 dgree delay ,time base 3 us
;
;
.PUBLIC G_Delay_Count ; MOSFET Check
.PUBLIC G_Mos_Num_Temp ; MOSFET Check
.PUBLIC G_Under_Test ; MOSFET Check
.PUBLIC G_Test_Num ; MOSFET Check
.PUBLIC G_Mos_Num ; MOSFET Check
.PUBLIC G_DISP_FLAG ; MOSFET Check
.DATA ; define data storage section
;****************************************
;* *
;* Program Area *
;* *
;****************************************
.CODE ;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : Power on Reset Process - Main Program
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
V_Reset:
sei ; Disable interrupt
ldx #C_STACK_BOTTOM ; Initial stack pointer at $00ff
txs ; Transfer to stack point
;
clr P_LVR_Opt,CB_LVR_V40 ; low ret =2.5v
clr P_LVR_Opt,CB_LVR_V40
; set P_LVR_Opt,CB_LVR_V40 ; low ret =4.0v
; set P_LVR_Opt,CB_LVR_V40
lda #$FF ; Clear Reset flag
sta P_SYS_Ctrl
sta P_SYS_Ctrl
jsr F_Delay5ms ; delay 5ms
jsr F_Delay5ms ; delay 5ms
jsr F_Delay5ms ; delay 5ms
jsr F_Delay5ms ; delay 5ms
jsr F_IintWDT ; Initial WDT
jsr F_ClearRAM ; clear RAM data to zero
jsr F_InitIOPort ; initial GPIO port
; jsr F_Alarm_InitMode
lda #$FF ; clear all interrupt flags
sta P_INT_Flag0
cli
;********************************************************************************
;* Purpose: Inspect MOSFET for short *
;* Display: Show the number of times on RED ERROR_LED according to its number * *
;********************************************************************************
.IFDEF U_Mosfet_Check
jsr F_InitMos_Check ; MOSFET Check
.ENDIF
;**************************************************************************
sei
jsr F_InitTimeRAM ; initial timer ram
jsr F_InitTMR0 ; initial timer 0
jsr F_InitTMR1 ; initial timer 1
jsr F_InitTMR2_3 ; initial timer 2_3
jsr F_InitTMB ; initial time base
jsr F_InitADC ; initial adc module
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : HallBar start detect
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
.IFDEF U_HallBar_Detect
L_HallBar_Fault:
jsr F_AD4_Detect_HallBar
cmp #$46
bcc L_HallBar_OK
set P_IOB_Data,LED
jmp L_HallBar_Fault
L_HallBar_OK:
clr P_IOB_Data,LED
.ENDIF
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : 120 degree / 60 degree Check
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
;.IFDEF U_HallInputMode
; jsr F_Phase_InitMode ;select 120 dgree
;ELSE
; set G_Hall_Flag,CB_Hall120Or60_Flag
;.ENDIF
clr G_Hall_Flag,CB_120_60_Checked
clr G_Hall_Flag,CB_Hall120Or60_Flag
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : Purpose: PWM Compresens init
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
.IFDEF U_PWM_Compresense
jsr F_InitPWM_Compresense ; pwm compresense init
.ENDIF
;**************************************************************************
;
;
lda #$FF ; clear all interrupt flags
sta P_INT_Flag0
sta P_INT_Flag1
sta P_INT_Flag2
cli
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : Main loop process
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
L_MAINLOOP:
lda #00000011B ; 4 time slot
and G_Time_Slot
sta G_Time_Slot
clc
adc G_Time_Slot ; address * 2 (2 bytes)
tax
lda T_SLOT_TSK,X ;
sta Gw_Pc_Reg
lda T_SLOT_TSK+1,X ;
sta Gw_Pc_Reg+1
jmp (Gw_Pc_Reg) ; table branch
;-----------------------------------------------------------------------------
;
L_MAILP_10:
L_MAILP_WT:
jsr F_Clear_Wdt ; clear watch dog
tst P_INT_Flag2, CB_INT_ITVALIF
beq L_MAILP_WT ; no, end IRQ check
set P_INT_Flag2, CB_INT_ITVALIF
;
jsr F_AD6_Detect ; I detect(Task 70 usec)
.IFDEF U_Alarm_Mode
jsr F_Alarm_InitMode ;select Normal operation
;ELSE
; clr P_IOB_Data,Alarm_LED
.ENDIF
;**************************************************************************
.IFDEF U_Modulate_Enable
lda G_ADC6_Buf
cmp #108 ;100=2.5 ;115
bcs ON_Modulate
clr P_IOB_Data,Modulate
jmp ModulateEnd
ON_Modulate:
set P_IOB_Data,Modulate
ModulateEnd:
nop
.ENDIF
;**************************************************************************
jsr F_Spd_MontCtrl ; pwm renew (Max 100 usec)
inc G_Time_Slot ; time slot pointer + 1
jsr F_Help_Detect ; help hall detect(50us)
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : electronic brake Check
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
.IFDEF U_Electric_Break
jsr F_EBS_InitMode
ELSE
clr G_BrakeError_Buf,CB_EbsEnable_Flag
.ENDIF
;
;
jmp L_MAINLOOP
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : Time Slot Tasks (1.0mSec)
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
;****************************************
F_TSLOT0: ;(Task0=> 220 usec)
jsr F_Protect_Control ; Voltage Current protect
jsr F_AD4_Detect ; Speed AD detect
jmp L_MAILP_10
;
;
F_TSLOT1: ;(Task1 250 usec)
jsr F_Speed_Control ; speed control process
IFDEF U_BatterChage_Mode
jsr F_BatteryCharge_Control
.ENDIF
jmp L_MAILP_10
;
;
F_TSLOT2: ;(Task2 120 usec)
jsr F_Brake_Control ; moto brake process
IFDEF U_MotoStopUp_Mode
jsr F_Motor_StopUp_Control ; moto stopup process
.ENDIF
jsr F_Led_Driver ; moto informtion display
jsr F_Protect_Control ; Voltage Current protect
jsr F_Clear_Wdt
jmp L_MAILP_10
;
;
F_TSLOT3: ;(Task3 220 usec)
;.IFDEF U_Alarm_Mode
; jsr F_Alarm_InitMode ;select Normal operation
; jsr F_Alarm_InitMode1
;ELSE
; clr P_IOB_Data,Alarm_LED
;.ENDIF
; jsr F_Alarm_InitMode ;qqq
jsr F_AD7_Detect ; Battery Voltage AD detect
jsr F_Time_Process ; motor time process
IFDEF U_BatterChage_Mode
jsr F_MotorStop_Control ; motor stop detect
.ENDIF
jmp L_MAILP_10
;
;
F_Clear_Wdt: ; clear watchdog
lda #C_WDT_Clr
sta P_WDT_Clr
sta P_WDT_Clr
rts
;
;
;****************************************
; Applied Body : SPMC65P2404A
; Firmware version: V1.0
; Programer :
; Date : 2006/09/15
; Description : Help hall detect process
; Hardware Connect: SPMC65 BLDC demo board
; IDE Version : v1.6.8
; BODY Version : v1.0.2A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -