⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.lis

📁 ISD1700语音芯片放音的ISP实现
💻 LIS
字号:
                        .module timer.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\AVR\ISD1700_ISP\src\timer.c
                        .area data(ram, con, rel)
 0000                   .dbfile E:\AVR\ISD1700_ISP\src\timer.c
 0000           _WdtTimer::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile E:\AVR\ISD1700_ISP\src\timer.c
 0001                   .dbsym e WdtTimer _WdtTimer c
 0001           _Timer1BaseClk::
 0001                   .blkb 2
                        .area idata
 0001 0000              .word 0
                        .area data(ram, con, rel)
 0003                   .dbfile E:\AVR\ISD1700_ISP\src\timer.c
 0003                   .dbsym e Timer1BaseClk _Timer1BaseClk i
                        .area text(rom, con, rel)
 0000                   .dbfile E:\AVR\ISD1700_ISP\src\timer.c
 0000                   .dbfunc e watchdog_init _watchdog_init fV
                        .even
 0000           _watchdog_init::
 0000                   .dbline -1
 0000                   .dbline 11
 0000           ; #include <iom64v.h>
 0000           ; #include <macros.h>
 0000           ; #include "main.h"
 0000           ; 
 0000           ; unsigned char WdtTimer = 0; //外部看门狗定时器
 0000           ; volatile unsigned int Timer1BaseClk = 0; //Timer1基准时钟
 0000           ; 
 0000           ; // 看门狗初始化函数
 0000           ; // prescale: 512K cycles,overtime 417ms
 0000           ; void watchdog_init(void)
 0000           ; {
 0000                   .dbline 12
 0000           ;     WDR(); //this prevents a timout on enabling
 0000 A895              wdr
 0002                   .dbline 13
 0002           ;     WDTCR = 0x18;     //WDCE、WDE位置1,再改变超时时间
 0002 88E1              ldi R24,24
 0004 81BD              out 0x21,R24
 0006                   .dbline 14
 0006           ;     WDTCR = 0x0D;     //WATCHDOG ENABLED - dont forget to issue WDRs
 0006 8DE0              ldi R24,13
 0008 81BD              out 0x21,R24
 000A                   .dbline -2
 000A           L1:
 000A                   .dbline 0 ; func end
 000A 0895              ret
 000C                   .dbend
 000C                   .dbfunc e timer1_init _timer1_init fV
                        .even
 000C           _timer1_init::
 000C                   .dbline -1
 000C                   .dbline 22
 000C           ; }
 000C           ; 
 000C           ; //TIMER1 initialize - prescale:8
 000C           ; // WGM: 0) Normal, TOP=0xFFFF
 000C           ; // desired value: 2000Hz
 000C           ; // actual value: 2000.000Hz (0.0%)
 000C           ; void timer1_init(void)
 000C           ; {
 000C                   .dbline 23
 000C           ;     TCCR1B = 0x00; //stop
 000C 2224              clr R2
 000E 2EBC              out 0x2e,R2
 0010                   .dbline 24
 0010           ;     TCNT1H = 0xFC; //setup
 0010 8CEF              ldi R24,252
 0012 8DBD              out 0x2d,R24
 0014                   .dbline 25
 0014           ;     TCNT1L = 0x18;
 0014 88E1              ldi R24,24
 0016 8CBD              out 0x2c,R24
 0018                   .dbline 26
 0018           ;     OCR1AH = 0x03;
 0018 83E0              ldi R24,3
 001A 8BBD              out 0x2b,R24
 001C                   .dbline 27
 001C           ;     OCR1AL = 0xE8;
 001C 88EE              ldi R24,232
 001E 8ABD              out 0x2a,R24
 0020                   .dbline 28
 0020           ;     OCR1BH = 0x03;
 0020 83E0              ldi R24,3
 0022 89BD              out 0x29,R24
 0024                   .dbline 29
 0024           ;     OCR1BL = 0xE8;
 0024 88EE              ldi R24,232
 0026 88BD              out 0x28,R24
 0028                   .dbline 30
 0028           ;     OCR1CH = 0x03;
 0028 83E0              ldi R24,3
 002A 80937900          sts 121,R24
 002E                   .dbline 31
 002E           ;     OCR1CL = 0xE8;
 002E 88EE              ldi R24,232
 0030 80937800          sts 120,R24
 0034                   .dbline 32
 0034           ;     ICR1H = 0x03;
 0034 83E0              ldi R24,3
 0036 87BD              out 0x27,R24
 0038                   .dbline 33
 0038           ;     ICR1L = 0xE8;
 0038 88EE              ldi R24,232
 003A 86BD              out 0x26,R24
 003C                   .dbline 34
 003C           ;     TCCR1A = 0x00;
 003C 2FBC              out 0x2f,R2
 003E                   .dbline 35
 003E           ;     TCCR1B = 0x02; //start Timer
 003E 82E0              ldi R24,2
 0040 8EBD              out 0x2e,R24
 0042                   .dbline -2
 0042           L2:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbend
                        .area vector(rom, abs)
                        .org 56
 0038 0C942200          jmp _timer1_ovf_isr
                        .area text(rom, con, rel)
 0044                   .dbfile E:\AVR\ISD1700_ISP\src\timer.c
                        .area data(ram, con, rel)
 0003                   .dbfile E:\AVR\ISD1700_ISP\src\timer.c
 0003           L4:
 0003                   .blkb 1
                        .area idata
 0003 00                .byte 0
                        .area data(ram, con, rel)
 0004                   .dbfile E:\AVR\ISD1700_ISP\src\timer.c
                        .area text(rom, con, rel)
 0044                   .dbfile E:\AVR\ISD1700_ISP\src\timer.c
 0044                   .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
 0044                   .dbsym s timer1int L4 c
                        .even
 0044           _timer1_ovf_isr::
 0044 2A92              st -y,R2
 0046 3A92              st -y,R3
 0048 4A92              st -y,R4
 004A 5A92              st -y,R5
 004C 8A93              st -y,R24
 004E 9A93              st -y,R25
 0050 AA93              st -y,R26
 0052 BA93              st -y,R27
 0054 2FB6              in R2,0x3f
 0056 2A92              st -y,R2
 0058                   .dbline -1
 0058                   .dbline 42
 0058           ; }
 0058           ; 
 0058           ; //-------------------------------------------------------------------------
 0058           ; 
 0058           ; #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
 0058           ; void timer1_ovf_isr(void)
 0058           ; {
 0058                   .dbline 46
 0058           ;     //TIMER1 has overflowed
 0058           ;     static unsigned char timer1int = 0;
 0058           ; 
 0058           ;     TCNT1H = 0xFC; //reload counter high value
 0058 8CEF              ldi R24,252
 005A 8DBD              out 0x2d,R24
 005C                   .dbline 47
 005C           ;     TCNT1L = 0x18; //reload counter low value
 005C 88E1              ldi R24,24
 005E 8CBD              out 0x2c,R24
 0060                   .dbline 49
 0060           ; 
 0060           ;     timer1int++;
 0060 80910300          lds R24,L4
 0064 8F5F              subi R24,255    ; addi 1
 0066 80930300          sts L4,R24
 006A                   .dbline 50
 006A           ;     if (timer1int >= 2)
 006A 8230              cpi R24,2
 006C 30F1              brlo L5
 006E           X0:
 006E                   .dbline 51
 006E           ;     {
 006E                   .dbline 53
 006E           ;         //1ms
 006E           ;         timer1int = 0;
 006E 2224              clr R2
 0070 20920300          sts L4,R2
 0074                   .dbline 54
 0074           ;         Timer1BaseClk++;
 0074 80910100          lds R24,_Timer1BaseClk
 0078 90910200          lds R25,_Timer1BaseClk+1
 007C 0196              adiw R24,1
 007E 90930200          sts _Timer1BaseClk+1,R25
 0082 80930100          sts _Timer1BaseClk,R24
 0086                   .dbline 55
 0086           ;         if (Timer1BaseClk >= 60000)
 0086 80E6              ldi R24,96
 0088 9AEE              ldi R25,234
 008A A0E0              ldi R26,0
 008C B0E0              ldi R27,0
 008E 20900100          lds R2,_Timer1BaseClk
 0092 30900200          lds R3,_Timer1BaseClk+1
 0096 4424              clr R4
 0098 5524              clr R5
 009A 2816              cp R2,R24
 009C 3906              cpc R3,R25
 009E 4A06              cpc R4,R26
 00A0 5B06              cpc R5,R27
 00A2 34F0              brlt L7
 00A4           X1:
 00A4                   .dbline 56
 00A4           ;         {
 00A4                   .dbline 57
 00A4           ;             Timer1BaseClk = 0;
 00A4 2224              clr R2
 00A6 3324              clr R3
 00A8 30920200          sts _Timer1BaseClk+1,R3
 00AC 20920100          sts _Timer1BaseClk,R2
 00B0                   .dbline 58
 00B0           ;         }
 00B0           L7:
 00B0                   .dbline 60
 00B0           ; 
 00B0           ;         WdtTimer++;
 00B0 80910000          lds R24,_WdtTimer
 00B4 8F5F              subi R24,255    ; addi 1
 00B6 80930000          sts _WdtTimer,R24
 00BA                   .dbline 61
 00BA           ;               }
 00BA           L5:
 00BA                   .dbline -2
 00BA           L3:
 00BA                   .dbline 0 ; func end
 00BA 2990              ld R2,y+
 00BC 2FBE              out 0x3f,R2
 00BE B991              ld R27,y+
 00C0 A991              ld R26,y+
 00C2 9991              ld R25,y+
 00C4 8991              ld R24,y+
 00C6 5990              ld R5,y+
 00C8 4990              ld R4,y+
 00CA 3990              ld R3,y+
 00CC 2990              ld R2,y+
 00CE 1895              reti
 00D0                   .dbend
 00D0                   .dbfunc e GetTime _GetTime fi
 00D0           ;         iTime1 -> R18,R19
 00D0           ;         iTime2 -> R16,R17
                        .even
 00D0           _GetTime::
 00D0                   .dbline -1
 00D0                   .dbline 65
 00D0           ; }
 00D0           ; 
 00D0           ; unsigned int GetTime(void)
 00D0           ; {
 00D0           L10:
 00D0                   .dbline 67
 00D0           ;       unsigned int iTime1,iTime2;
 00D0           ;       do{
 00D0                   .dbline 68
 00D0           ;               iTime1 = Timer1BaseClk;
 00D0 20910100          lds R18,_Timer1BaseClk
 00D4 30910200          lds R19,_Timer1BaseClk+1
 00D8                   .dbline 69
 00D8           ;               iTime2 = Timer1BaseClk;
 00D8 00910100          lds R16,_Timer1BaseClk
 00DC 10910200          lds R17,_Timer1BaseClk+1
 00E0                   .dbline 70
 00E0           ;       }while(iTime2 != iTime1);
 00E0           L11:
 00E0                   .dbline 70
 00E0 0217              cp R16,R18
 00E2 1307              cpc R17,R19
 00E4 A9F7              brne L10
 00E6           X2:
 00E6                   .dbline 71
 00E6           ;       return iTime2;
 00E6                   .dbline -2
 00E6           L9:
 00E6                   .dbline 0 ; func end
 00E6 0895              ret
 00E8                   .dbsym r iTime1 18 i
 00E8                   .dbsym r iTime2 16 i
 00E8                   .dbend
 00E8                   .dbfunc e GetPassTime _GetPassTime fi
 00E8           ;         temp_i -> R10,R11
 00E8           ;       iCurTime -> R10,R11
 00E8           ;       iPreTime -> R12,R13
                        .even
 00E8           _GetPassTime::
 00E8 0E940000          xcall push_xgsetF03C
 00EC 6801              movw R12,R16
 00EE                   .dbline -1
 00EE                   .dbline 76
 00EE           ; }
 00EE           ; //-------------------------------------------------------------------------
 00EE           ; 
 00EE           ; unsigned int GetPassTime(unsigned int iPreTime)
 00EE           ; {
 00EE                   .dbline 77
 00EE           ;     unsigned int temp_i = 0;
 00EE                   .dbline 78
 00EE           ;               unsigned int iCurTime = GetTime();
 00EE F0DF              xcall _GetTime
 00F0 5801              movw R10,R16
 00F2                   .dbline 80
 00F2           ; 
 00F2           ;     if (iCurTime >= iPreTime)
 00F2 0C15              cp R16,R12
 00F4 1D05              cpc R17,R13
 00F6 18F0              brlo L14
 00F8           X3:
 00F8                   .dbline 81
 00F8           ;     {
 00F8                   .dbline 82
 00F8           ;         return (iCurTime - iPreTime);
 00F8 0C19              sub R16,R12
 00FA 1D09              sbc R17,R13
 00FC 13C0              xjmp L13
 00FE           L14:
 00FE                   .dbline 85
 00FE           ;     }
 00FE           ;     else
 00FE           ;     {
 00FE                   .dbline 86
 00FE           ;         return (60000 - iPreTime + iCurTime);
 00FE 1601              movw R2,R12
 0100 4424              clr R4
 0102 5524              clr R5
 0104 40E6              ldi R20,96
 0106 5AEE              ldi R21,234
 0108 60E0              ldi R22,0
 010A 70E0              ldi R23,0
 010C 4219              sub R20,R2
 010E 5309              sbc R21,R3
 0110 6409              sbc R22,R4
 0112 7509              sbc R23,R5
 0114 1501              movw R2,R10
 0116 4424              clr R4
 0118 5524              clr R5
 011A 420D              add R20,R2
 011C 531D              adc R21,R3
 011E 641D              adc R22,R4
 0120 751D              adc R23,R5
 0122 8A01              movw R16,R20
 0124                   .dbline -2
 0124           L13:
 0124                   .dbline 0 ; func end
 0124 0C940000          xjmp pop_xgsetF03C
 0128                   .dbsym r temp_i 10 i
 0128                   .dbsym r iCurTime 10 i
 0128                   .dbsym r iPreTime 12 i
 0128                   .dbend
 0128           ;     }
 0128           ; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -