| binggirl0451 | |
 等级: 四年级 贴数: 61 积分: 136 来自: 哈尔滨 |
| |
 |
我使能的是通用定时器1周期中断。有中断触发A/D转换。有时程序执行正常,有时进不去中断。为什么?各位大虾帮忙看看。多谢了。还有想问一下如何改变选通通道值。我要采集16路A/D,要怎么改变ADCTRL1的设置呢? .title "AD.asm" .include "f240regs.h" .def _c_int0 ;--------------------------------------------------------------------- ; I/O Mapped EVM Register Declarations ;--------------------------------------------------------------------- DAC0 .set 0000h ;DAC Channel 0 Register DAC1 .set 0001h ;DAC Channel 1 Register DAC2 .set 0002h ;DAC Channel 2 Register DAC3 .set 0003h ;DAC Channel 3 Register DAC_UPDATE .set 0004h ;DAC Update Register SWITCHES .set 0008h ;DIP Switch Register LEDS .set 000dh ;LEDs Register temp .set 0010h
;--------------------------------------------------------------------- ; Variable Declarations for on chip RAM Blocks ;--------------------------------------------------------------------- .sect ".vectors"
RSVECT B _c_int0 ; Reset Vector INT1 B PHANTOM ; Interrupt Level 1 INT2 B GISR2 ; Interrupt Level 2 INT3 B PHANTOM ; Interrupt Level 3 INT4 B PHANTOM ; Interrupt Level 4 INT5 B PHANTOM ; Interrupt Level 5 INT6 B PHANTOM ; Interrupt Level 6 RESERVED B PHANTOM ; Reserved SW_INT8 B PHANTOM ; User S/W Interrupt SW_INT9 B PHANTOM ; User S/W Interrupt SW_INT10 B PHANTOM ; User S/W Interrupt SW_INT11 B PHANTOM ; User S/W Interrupt SW_INT12 B PHANTOM ; User S/W Interrupt SW_INT13 B PHANTOM ; User S/W Interrupt SW_INT14 B PHANTOM ; User S/W Interrupt SW_INT15 B PHANTOM ; User S/W Interrupt SW_INT16 B PHANTOM ; User S/W Interrupt TRAP B PHANTOM ; Trap vector NMINT B PHANTOM ; Non-maskable Interrupt EMU_TRAP B PHANTOM ; Emulator Trap SW_INT20 B PHANTOM ; User S/W Interrupt SW_INT21 B PHANTOM ; User S/W Interrupt SW_INT22 B PHANTOM ; User S/W Interrupt SW_INT23 B PHANTOM ; User S/W Interrupt
.bss GPR0,1 ;General purpose register. .bss LED_STATUS,1 ;LED Status Register .bss SW_STATUS,1 .bss RPT_NUM,1 ;RPT value, used in mS_DELAY .bss mSEC,1 ;Delay value, used in mS_DELAY .bss CONTEXT_MEM_PRT,6 .bss TRTEMP,1 .bss TIME,1 .bss AD_RESULT1,1 .bss AD_RESULT2,1 .bss AD_RESULT3,1 .bss AD_RESULT4,1 .bss AD_RESULT5,1 .bss AD_RESULT6,1 .bss AD_RESULT7,1 .bss AD_RESULT8,1 .bss AD_RESULT9,1 .bss AD_RESULT10,1 .bss AD_RESULT11,1 .bss AD_RESULT12,1 .bss AD_RESULT13,1 .bss AD_RESULT14,1 .bss AD_RESULT15,1 .bss AD_RESULT16,1
;===================================================================== ; M A I N C O D E - starts here ;=====================================================================
.text _c_int0: NOP CALL SYSINIT CALL GP_INIT CALL AD_INIT WAIT: NOP B WAIT SYSINIT: LDP #0H SPLK #0H,IMR SETC INTM ;Disable interrupts CLRC SXM ;Clear Sign Extension Mode CLRC OVM ;Reset Overflow Mode CLRC CNF ;Config Block B0 to Data mem LDP #0E0h ;DP for addresses 7000h-707Fh SPLK #00BBh,CKCR1 ;CLKIN(OSC)=10MHz,CPUCLK=20MHz SPLK #00C3h,CKCR0 ;CLKMD=PLL Enable,SYSCLK=CPUCLK/2 SPLK #40C0h,SYSCR ;CLKOUT=CPUCL SPLK #006Fh, WDCR ;Disable WD if VCCP=5V (JP5 in pos. 2-3) LDP #0H SPLK #0002h,IMR ;enable INT2 LACC IFR ;Read Interrupt flags SACL IFR ;Clear all interrupt flags LDP #04H SPLK #0h,GPR0 ;Set wait state generator for: OUT GPR0,WSGR ;LDP #04H ;SPLK #09H,TIME ;Program Space, 0 wait states RET ;Data Space, 0 wait states ;I/O Space, 0 wait states
GP_INIT: LDP #0E8H SPLK #0FFFFh,EVIFRA SPLK #0155h,GPTCON ;0000000101010101 由T1周期中断启动A/D转换, SPLK #0170Ah,T1CON ;0001 0111 0000 1010 采用连续增计数模式,128分频, ;停止计数;内部时钟;;定时比较寄存器立即装载;使能比较操作;使用自己的周期寄存器 SPLK #02625h,T1PR ;0.125s SPLK #0h,T1CNT SPLK #0174AH,T1CON ;使能计数 SPLK #0080H,EVIMRA ; 0000 0000 1000 0000 enable T1PINT ;LACC EVIMRA ;LAR AR0,#01H ;SPLK #01H,LED_STATUS ;OUT LED_STATUS,LEDS RET AD_INIT: LDP #0E1H SPLK #000FH,OCRA ;IOPA设为A/D输入,IOPB为I/O输入。 LDP #0E0H SPLK #01800H,ADCTRL1 ;0001 1000 0000 0000使能ADC2,ADC1,不采用连续转换模式 ;屏蔽模数中断,选择通道1,9 SPLK #0405H,ADCTRL2 ;0000 0100 0000 0101 bit10 使能事件管理器同步启动A/D,bit9 禁止由外部信号启动A/D ;bit2-0 16分频 SPLK #1801H,ADCTRL1 ;LDP #0H CLRC INTM ;开中断 RET GISR2: SETC INTM MAR *,AR7 ;现场保护 SST #1,*+ SACH *+ SACL *+ SST #0,*+ SPH *+ SPL *+ MPY #1 SPL * LDP #0E8H ;是否是T1PINT LACL EVIVRA XOR #0027H BCND T1GP_ISR,EQ B GISR2_RET T1GP_ISR: LDP #0E0H ;LACC ADCTRL1 ;XOR #01H ;SACL ADCTRL1 BIT ADCTRL1,8 ;查询AD转换是否完成?为0完成。 BCND T1GP_ISR,TC LACL ADCFIFO1 RPT #05H SFR LDP #004H SACL AD_RESULT1 LDP #0E0H LACL ADCFIFO2 RPT #05H SFR LDP #04H SACL AD_RESULT2 ;SACL AD_RESULT2 LACC AD_RESULT1 SUB #01ADH ;比较值设为2.1V BCND BJ1,LEQ ;ACC<=0 LACC AD_RESULT2 SUB #0147H ;比较值设为1.6V BCND BJ2,LEQ B GISR2_RET BJ1: LDP #04H SPLK #40H,LED_STATUS ;点亮相应的灯 OUT LED_STATUS,LEDS SPLK #2000,mSEC CALL mS_DELAY ;延时1s SPLK #00H,LED_STATUS LDP #0H OUT LED_STATUS,LEDS B GISR2_RET BJ2: LDP #04H SPLK #80H,LED_STATUS ;点亮相应的灯 OUT LED_STATUS,LEDS SPLK #2000,mSEC CALL mS_DELAY ;延时1s SPLK #00H,LED_STATUS LDP #0H OUT LED_STATUS,LEDS B GISR2_RET ;Set mSEC for a 50ms delay ;LAR AR3,#6h ;Load AR0 with 6 for loop counter ;LAR AR2,#3H ;LAR AR0,#09H
mS_DELAY: LDP #004h ;DP-->0000h-007Fh LACC #5000 ;Load RPT value to GPR0 SACL RPT_NUM LAR AR1,mSEC ;Set AR0 to generate a MAR *,AR1 ;(AR0*0.1)mSEC delay loop
mS_LOOP: LDP #004h ;DP-->0000h-007Fh RPT RPT_NUM ;2000 cycles = 0.1mS NOP ;1 cycle BANZ mS_LOOP ;Repeat DELAY_LOOP RET ;Return from DELAY SR GISR2_RET: MAR *,AR5 ;恢复现场 LDP #0 LACL *- SACL TRTEMP LT *- MPY #1 LPH *- LT TRTEMP LST #0,*- LACL *- ADD *-,16 LST #1,* LDP #0E8H SPLK #0H,T1CNT LACC EVIFRA SACL EVIFRA CLRC INTM RET PHANTOM ;KICK_DOG ;Resets WD counter B PHANTOM
|
|
| |