currentsource.lst
来自「Application Note Abstract The unique co」· LST 代码 · 共 1,542 行 · 第 1/5 页
LST
1,542 行
(0236) jz .WaitFor16ms ; TimeOut occurs on Sleep Timer 16ms
(0237)
(0238) ELSE ;!(SELECT_32K)
(0239) ERROR_PSoC Using the PLL without the Crystal is invalid.
(0240) ENDIF ;(SELECT_32K)
(0241) ENDIF ;(PLL_MODE)
(0242)
(0243) ;-------------------------------------------------------------------------
(0244) ; default CT block RTopMux to OUT and RBotMux to AGND
(0245) ;-------------------------------------------------------------------------
(0246)
(0247) mov reg[ACA00CR0],05h
0059: 62 71 05 MOV REG[113],5
(0248) mov reg[ACA01CR0],05h
005C: 62 75 05 MOV REG[117],5
(0249) mov reg[ACA02CR0],05h
005F: 62 79 05 MOV REG[121],5
(0250) mov reg[ACA03CR0],05h
0062: 62 7D 05 MOV REG[125],5
(0251)
(0252) ;-------------------------------------------------------------------------
(0253) ; All the user selections and UserModule selections are now loaded.
(0254) ; !!! Except CPU frequency !!!! (CPU is runing at 12 MHz)
(0255) ;-------------------------------------------------------------------------
(0256)
(0257) Config:
(0258) lcall LoadConfigInit ; Configure PSoC blocks per Dev Editor
0065: 7C 01 86 LCALL 0x0186
(0259)
(0260)
(0261) IF (C_LANGUAGE_SUPPORT)
(0262) call InitCRunTime ; Initialize for C language
0068: 90 22 CALL 0x008C
(0263) ENDIF ;(C_LANGUAGE_SUPPORT)
(0264)
(0265) mov reg[INT_VC],0 ; Clear any pending interrupts which may
006A: 62 E2 00 MOV REG[226],0
(0266) ; have been set during the boot process.
(0267)
(0268) ;-------------------------------------------------------------------------
(0269) ; We always enable LVD / Voltage Monitoring by default
(0270) ;-------------------------------------------------------------------------
(0271)
(0272) M8C_EnableIntMask INT_MSK0, INT_MSK0_VoltageMonitor ; LVD only
006D: 43 E0 01 OR REG[224],1
(0273)
(0274) IF (SWITCH_MODE_PUMP ^ 1) ; !!! This value is 1 if the SMP is disabled !!!
(0275) ;-------------------------------------------------------------------------
(0276) ; Pump is enabled, and customer requests it to work. Vcc is currently at
(0277) ; or is slewing towards customer's requested Vcc.
(0278) ;-------------------------------------------------------------------------
(0279)
(0280) IF (CPU_CLOCK_JUST ^ OSC_CR0_CPU_24MHz) ; Clock is not 24MHz
(0281) ;-------------------------------------------------------------------------
(0282) ; < 24 MHz operation is requested. Any reasonable Vcc is OK.
(0283) ;-------------------------------------------------------------------------
(0284)
(0285) ELSE ;!(CPU_CLOCK_JUST ^ OSC_CR0_CPU_24MHz)
(0286) ;-------------------------------------------------------------------------
(0287) ; 24 MHz operation is requested. Requires 5V operation.
(0288) ; Only 07h setting is valid (04h | 03h)
(0289) ;-------------------------------------------------------------------------
(0290)
(0291) IF (SUPPLY_VOLTAGE)
(0292) ;-------------------------------------------------------------------------
(0293) ; 4.19 thru 5.0 V is selected
(0294) ;-------------------------------------------------------------------------
(0295)
(0296) IF (TRIP_VOLTAGE ^ 07h)
(0297) ERROR_PSoC TRIP_VOLTAGE must be 4.64V(5.00V) for 24 MHz operation
(0298)
(0299) ENDIF ;(TRIP_VOLTAGE ^ 07h)
(0300)
(0301) ELSE ;!(SUPPLY_VOLTAGE)
(0302) ERROR_PSoC Only valid SMP setting is 5.0 V
(0303)
(0304) ENDIF ;(SUPPLY_VOLTAGE)
(0305) ENDIF ;(CPU_CLOCK_JUST ^ OSC_CR0_CPU_24MHz)
(0306)
(0307) ;-------------------------------------------------------------------------
(0308) ; But must wait for the SMP to slew from 3.1 to 5 Volts, if SMP selected.
(0309) ;-------------------------------------------------------------------------
(0310) M8C_EnableIntMask INT_MSK0, INT_MSK0_Sleep
(0311)
(0312) IF (SUPPLY_VOLTAGE)
(0313) M8C_SetBank1
(0314) mov reg[OSC_CR0], OSC_CR0_Sleep_512Hz
(0315) M8C_SetBank0
(0316)
(0317) M8C_ClearWDTAndSleep ; Reset the sleep timer
(0318)
(0319) mov reg[INT_VC],0 ; Clear all pending interrupts
(0320) .WaitFor2ms:
(0321) mov A, reg[INT_VC] ; read Interrupt Vector
(0322) jz .WaitFor2ms ; TimeOut occurs on Sleep Timer 2ms
(0323) ENDIF ;(SUPPLY_VOLTAGE)
(0324)
(0325) ;-------------------------------------------------------------------------
(0326) ; Vcc is Stable and Correct, at 5V range. Setup LVD for Brownout
(0327) ;-------------------------------------------------------------------------
(0328)
(0329) M8C_EnableIntMask INT_MSK0, INT_MSK0_VoltageMonitor ; LVD only
(0330)
(0331) ELSE ;!(SWITCH_MODE_PUMP ^ 1) ; SMP is disabled
(0332) ;-------------------------------------------------------------------------
(0333) ; Normal operation with no pump.
(0334) ;-------------------------------------------------------------------------
(0335)
(0336) M8C_EnableIntMask INT_MSK0, INT_MSK0_VoltageMonitor ; LVD only
0070: 43 E0 01 OR REG[224],1
(0337)
(0338) IF (CPU_CLOCK_JUST ^ OSC_CR0_CPU_24MHz)
(0339) ;-------------------------------------------------------------------------
(0340) ; < 24 MHz operation is requested. Any reasonable Vcc is OK.
(0341) ;-------------------------------------------------------------------------
(0342)
(0343) ELSE ;!(CPU_CLOCK_JUST ^ OSC_CR0_CPU_24MHz)
(0344) ;-------------------------------------------------------------------------
(0345) ; 24 MHz operation is requested. Requires 5V operation.
(0346) ;-------------------------------------------------------------------------
(0347)
(0348) IF (SUPPLY_VOLTAGE)
(0349) ; Set the CPU speed to 93.75kHz in order to slow down INT_VC read
(0350) M8C_SetBank1
(0351) mov reg[OSC_CR0], (SELECT_32K_JUST | PLL_MODE_JUST | SLEEP_TIMER_JUST | OSC_CR0_CPU_93d7kHz)
(0352) .LVDLoop:
(0353) M8C_SetBank1
(0354) mov reg[VLT_CR], 00h ; LVD at 2.95 V (Power Good if >2.95V)
(0355) M8C_SetBank0
(0356) mov reg[INT_VC],0 ; Clear LVD interrupt
(0357) M8C_SetBank1
(0358) mov reg[VLT_CR], 07h ; Force LVD at 4.64 V (Power Not good if <4.64V)
(0359) M8C_SetBank0 ; Must wait 10 usec before reading INT_VC
(0360) mov A, reg[INT_VC]
(0361) jz .GoodVcc
(0362) jmp .LVDLoop ; Wait for good Vcc
(0363) .GoodVcc:
(0364) ;-------------------------------------------------------------------------
(0365) ; Leave LVD at 4.64 V (Required, no exceptions)
(0366) ;-------------------------------------------------------------------------
(0367)
(0368) ELSE ;!(SUPPLY_VOLTAGE)
(0369)
(0370) ERROR_PSoC 24 MHz at other than 5V is invalid.
(0371)
(0372) ENDIF ;(SUPPLY_VOLTAGE)
(0373) ENDIF ;(CPU_CLOCK_JUST ^ OSC_CR0_CPU_24MHz)
(0374) ENDIF ;(SWITCH_MODE_PUMP ^ 1)
(0375)
(0376) ;-------------------------------------------------------------------------
(0377) ; Disable the Sleep interrupt that was used for timing above.
(0378) ;-------------------------------------------------------------------------
(0379) M8C_DisableIntMask INT_MSK0, INT_MSK0_Sleep
0073: 5D FF MOV A,REG[255]
0075: 70 FE AND F,254
0077: 41 E0 BF AND REG[224],191
007A: 21 80 AND A,128
007C: A0 03 JZ 0x0080
007E: 71 01 OR F,1
(0380)
(0381) ;-------------------------------------------------------------------------
(0382) ; Everything has started OK. Now select requested CPU & sleep frequency.
(0383) ;-------------------------------------------------------------------------
(0384)
(0385) M8C_SetBank1
0080: 71 10 OR F,16
(0386) mov reg[OSC_CR0], (SELECT_32K_JUST | PLL_MODE_JUST | SLEEP_TIMER_JUST | CPU_CLOCK_JUST)
0082: 62 E0 00 MOV REG[224],0
(0387) M8C_SetBank0
0085: 70 EF AND F,239
(0388)
(0389) ;-------------------------------------------------------------------------
(0390) ; Global Interrupt are NOT enabled, this should be done in main().
(0391) ; LVD is set but will not occur unless Global Interrupts are enabled.
(0392) ; Global Interrupts should be as soon as possible in main().
(0393) ;-------------------------------------------------------------------------
(0394)
(0395) lcall _main ; Call main
0087: 7C 01 C8 LCALL __text_start
(0396)
(0397) __Exit:
(0398) jmp __Exit ; Wait here till power is turned off
008A: 8F FF JMP 0x008A
(0399)
(0400)
(0401)
(0402) ;-----------------------------------------------------------------------------
(0403) ; C Runtime Environment Initialization
(0404) ; The following code is conditionally assembled.
(0405) ;-----------------------------------------------------------------------------
(0406)
(0407) IF (C_LANGUAGE_SUPPORT)
(0408)
(0409) InitCRunTime:
(0410) ;-----------------------------
(0411) ; clear bss segment
(0412) ;-----------------------------
(0413) mov A,0
008C: 50 00 MOV A,0
(0414) mov [__r0],<__bss_start
008E: 55 00 01 MOV [__r0],1
(0415) BssLoop:
(0416) cmp [__r0],<__bss_end
0091: 3C 00 01 CMP [__r0],1
(0417) jz BssDone
0094: A0 05 JZ 0x009A
(0418) mvi [__r0],A
0096: 3F 00 MVI [__r0],A
(0419) jmp BssLoop
0098: 8F F8 JMP 0x0091
(0420) BssDone:
(0421) ;----------------------------
(0422) ; copy idata to data segment
(0423) ;----------------------------
(0424) mov A,>__idata_start
009A: 50 01 MOV A,1
(0425) mov X,<__idata_start
009C: 57 86 MOV X,134
(0426) mov [__r0],<__data_start
009E: 55 00 00 MOV [__r0],0
(0427) IDataLoop:
(0428) cmp [__r0],<__data_end
00A1: 3C 00 00 CMP [__r0],0
(0429) jz IDataDone
00A4: A0 0B JZ 0x00B0
(0430) push A
00A6: 08 PUSH A
(0431) romx
00A7: 28 ROMX
(0432) mvi [__r0],A
00A8: 3F 00 MVI [__r0],A
(0433) pop A
00AA: 18 POP A
(0434) inc X
00AB: 75 INC X
(0435) adc A,0
00AC: 09 00 ADC A,0
(0436) jmp IDataLoop
00AE: 8F F2 JMP 0x00A1
(0437) IDataDone:
(0438) ret
00B0: 7F RET
00B1: 30 HALT
00B2: 30 HALT
00B3: 30 HALT
00B4: 30 HALT
00B5: 30 HALT
00B6: 30 HALT
00B7: 30 HALT
00B8: 30 HALT
00B9: 30 HALT
00BA: 30 HALT
00BB: 30 HALT
00BC: 30 HALT
00BD: 30 HALT
00BE: 30 HALT
00BF: 30 HALT
00C0: 30 HALT
00C1: 30 HALT
00C2: 30 HALT
00C3: 30 HALT
00C4: 30 HALT
00C5: 30 HALT
00C6: 30 HALT
00C7: 30 HALT
00C8: 30 HALT
00C9: 30 HALT
00CA: 30 HALT
00CB: 30 HALT
00CC: 30 HALT
00CD: 30 HALT
00CE: 30 HALT
00CF: 30 HALT
00D0: 30 HALT
00D1: 30 HALT
00D2: 30 HALT
00D3: 30 HALT
00D4: 30 HALT
00D5: 30 HALT
00D6: 30 HALT
00D7: 30 HALT
00D8: 30 HALT
00D9: 30 HALT
00DA: 30 HALT
00DB: 30 HALT
00DC: 30 HALT
00DD: 30 HALT
00DE: 30 HALT
00DF: 30 HALT
00E0: 30 HALT
00E1: 30 HALT
00E2: 30 HALT
00E3: 30 HALT
00E4: 30 HALT
00E5: 30 HALT
00E6: 30 HALT
00E7: 30 HALT
00E8: 30 HALT
00E9: 30 HALT
00EA: 30 HALT
00EB: 30 HALT
00EC: 30 HALT
00ED: 30 HALT
00EE: 30 HALT
00EF: 30 HALT
00F0: 30 HALT
00F1: 30 HALT
00F2: 30 HALT
00F3: 30 HALT
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?