?? fc430_es417_cce.asm
字號:
.field 3700,16 ; 80 F
.field 3900,16
.field 4000,16
.field 4200,16
.field 4400,16
.field 4500,16 ; 75 F
.field 4700,16
.field 4900,16
.field 5100,16
.field 5300,16
.field 5500,16 ; 70 F
.field 5800,16
.field 6000,16
.field 6300,16
.field 6500,16
.field 6800,16 ; 65 F
.field 7100,16
.field 7400,16
.field 7700,16
.field 8100,16
.field 8400,16 ; 60 F
.field 8800,16
.field 9200,16
.field 9600,16
.field 10000,16
.field 10500,16 ; 55 F
.field 10900,16
.field 11400,16
.field 12000,16
.field 12500,16
.field 13100,16 ; 50 F
.field 13700,16
.field 14300,16
.field 15000,16
.field 15700,16
.field 16500,16 ; 45 F
.field 17300,16
.field 18100,16
.field 19000,16
.field 20000,16
.field 21000,16 ; 40 F
.field 22000,16
.field 23100,16
.field 24200,16
.field 25400,16
.field 26700,16 ; 35 F
.field 28100,16
.field 29600,16
.field 31100,16 ; 32 F
;*******************************************************************************
; Initialized Global Variables
;*******************************************************************************
.bss status,2,2 ; Alarm status of system
.bss level,2,2 ; System cooling level setting
.bss LCD,4,2 ; Temp storage for LCD memory map
.bss tachCount,4,2 ; Frequency generator counter of fan
.bss tachRPM,4,2 ; Current tachometer reading in RPM
.bss lastRPM,4,2 ; Last tachometer reading in RPM
.bss tempDegF,4,2 ; Current temperature in degrees F
.bss arrowState,4,2 ; State machine for arrows on LCD
.bss TEMP,4,2 ; Temp. storage in temp routine
.bss RESULT,4,2 ; Temp. storage in temp routine
.bss IRBIT,4,2 ; Used for bit test
.bss IROP1,4,2 ; First operand
.bss IROP2L,4,2 ; Second operand low word
.bss IROP2H,4,2 ; Second operand high word
.bss IRACCL,4,2 ; Math result low word
.bss IRACCH,4,2 ; Math result high word
;************************* ZERO-INIT GLOBAL VARIABLES **************************
;-------------------------------------------------------------------------------
; Initial Values for Global Variables
.sect ".cinit"
.align 2
;-------------------------------------------------------------------------------
.field 2,16
.field status,16 ; Alarm status of system
.field 0,16
.field 2,16
.field level, 16 ; System cooling level setting
.field 1,16
.field 4,16
.field LCD,16 ; Temp storage for LCD memory map
.field 0,32
.field 4,16
.field tachCount,16 ; Frequency generator counter of fan
.field 0,32
.field 4,16
.field tachRPM,16 ; Current tachometer reading in RPM
.field 0,32
.field 4,16
.field lastRPM,16 ; Last tachometer reading in RPM
.field 0,32
.field 4,16
.field tempDegF,16 ; Current temperature in degrees F
.field 0,32
.field 4,16
.field arrowState,16 ; State machine for arrows on LCD
.field 0,32
.field 4,16
.field TEMP,16 ; Temp. storage in temp routine
.field 0,32
.field 4,16
.field RESULT,16 ; Temp. storage in temp routine
.field 0,32
.field 4,16
.field IRBIT,16 ; Used for bit test
.field 0,32
.field 4,16
.field IROP1,16 ; First operand
.field 0,32
.field 4,16
.field IROP2L,16 ; Second operand low word
.field 0,32
.field 4,16
.field IROP2H,16 ; Second operand high word
.field 0,32
.field 4,16
.field IRACCL,16 ; Math result low word
.field 0,32
.field 4,16
.field IRACCH,16 ; Math result high word
.field 0,32
;-------------------------------------------------------------------------------
; Application Program / Code Functions
.sect ".text"
.align 2
;-------------------------------------------------------------------------------
;*************************** MAIN SYSTEM PROCESSING ***************************
RESET: mov.w #300h, SP ; Initialize system stackpointer
call #initSystem ; Initialize the system as a whole
main_loop: bis.w #LPM0, SR ; Drop into Low Power Mode 0
call #checkTach ; Update tachometer readings
call #sampleTemp ; Take a temperature reading
call #dispTemp ; Update temperature on LCD
call #checkTemp ; Check temp & set cooling level
call #dispLevel ; Display cooling level setting
jmp main_loop ; Repeat main background loop
;------------------------------------------------------------------------------
initSystem: mov.w #(WDTPW+WDTHOLD),&WDTCTL; Disable the Watchdog
bis.b #XCAP18PF, &FLL_CTL0 ; Set internal load caps for xtal
mov.w #0x00, R15 ; Reset counter
setupFLL: cmp.w #0x2710, R15 ; Delay for FLL to lock (@ power up)
jc setupP1 ; FLL locked, exit calibration loop
add.w #0x01, R15 ; Increment our FLL delay counter
jmp setupFLL ; Busy loop until FLL is locked
setupP1: bic.b #ACTIVITY, &P1SEL ; Configure Port 1 Output Pin(s)
bis.b #ACTIVITY, &P1DIR ; Physically set the Port 1 Pin(s)
setupP2: mov.b #0xFF, &P2SEL ; Set segment outputs for LCD
mov.b #0xFF, &P2DIR ; All outputs
bic.b #TACH, &P2SEL ; Set up tachometer input
bic.b #TACH, &P2DIR ; Set up tachometer direction
bis.b #TACH, &P2IE ; Enable Port 2 interrupt
bis.b #TACH, &P2IES ; Generate ints on falling edge
setupWDT: mov.w #WDT_ADLY_1000, &WDTCTL ; Set up Watchdog Interval
bis.b #WDTIE, &IE1 ; Enable WatchdogTimer Interval int
setupLCD: mov.b #0xFF, &P3SEL ; Set segment outputs for LCD
mov.b #0xFF, &P3DIR ; All outputs
mov.b #0xFF, &P4SEL ; Set segment outputs for LCD
mov.b #0xFF, &P4DIR ; All outputs
mov.b #0xFC, &P5SEL ; Set Rxx and COM pins for LCD
mov.b #0xFF, &P5DIR ; All outputs
; 4mux LCD, segs0-15 = outputs
mov.b #(LCDON+LCDSG0_3+LCD4MUX), &LCDCTL
; Set LCD frame freq = ACLK/128
; Set interrupt interval
setupBT: mov.b #(BT_fLCD_DIV128+BTDIV+BTIP2), &BTCTL
bis.b #BTIE, &IE2 ; Enable Basic Timer interrupt
mov.b #0xFF, &LCDM8 ; Set S15:S14 on LCD
mov.b #0xFF, &LCDM9 ; Set S17:S16 on LCD
mov.b #0xFF, &LCDM10 ; Set S19:S18 on LCD
mov.b #0xF7, &LCDM11 ; Set S21:S20 on LCD
setupPWM: bis.b #PWM, &P2DIR ; Sonfigure for output direction
bis.b #PWM, &P2SEL ; Select peripheral option
mov.w #PERIOD050USEC, &TA1CCR0; Set up the PWM Period
mov.w #(TASSEL_2+MC_1),&TA1CTL; Use SMCLK, count up mode
mov.w #OUTMOD_1, &TA1CCTL1 ; Output HI signal - keep fans off
setupCA0: and.b #~(REF+THERM), &P1SEL ; Select GPIO function for R(ref)
bis.b #(REF+THERM), &P1DIR ; Change R(ref) pin for output
; (vs. floating; saves power)
and.b #~(REF+THERM), &P1OUT ; Clear resistor outputs
mov.b #(REF+THERM+CAIN), &CAPD; Disable input buffers for inputs
mov.b #P2CA0, &CACTL2 ; Set up comparator port
initData: mov.b #0x01, &level ; Initialize to Level 1 (one-time)
mov.w #0x91, &LCD ; Initialize LCD (one-time)
enableInts: eint ; Enable global interrupts
ret ; Return from subroutine
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -