📄 attest.lst
字号:
02AA B388 IN R24,0x18
02AB 7E8F ANDI R24,0xEF
02AC BB88 OUT 0x18,R24
(0256) spi_write(0x81); //页擦除
02AD E801 LDI R16,0x81
02AE E010 LDI R17,0
02AF DE42 RCALL _spi_write
(0257) spi_write((uint)(page>>6)); //2个无关位,12位页地址 PA11~PA0 与10个无关位
02B0 E026 LDI R18,6
02B1 E030 LDI R19,0
02B2 018A MOVW R16,R20
02B3 940E0677 CALL lsr16
02B5 DE3C RCALL _spi_write
(0258) spi_write((uint)(page<<2));
02B6 018A MOVW R16,R20
02B7 0F00 LSL R16
02B8 1F11 ROL R17
02B9 0F00 LSL R16
02BA 1F11 ROL R17
02BB DE36 RCALL _spi_write
(0259) spi_write(0x00); // don't cares
02BC 2700 CLR R16
02BD 2711 CLR R17
02BE DE33 RCALL _spi_write
(0260)
(0261) UNSELECT_CHIP;
02BF 9AC4 SBI 0x18,4
(0262)
(0263) df_wait_busy();
02C0 DE37 RCALL _df_wait_busy
02C1 940E0653 CALL pop_gset1
02C3 9508 RET
FILE: E:\ICC128\2008控制台\2008console0TEST\flashTest\ledtest.c
(0001)
(0002) //ICC-AVR application builder : 2008-1-23 9:13:29
(0003) // Target : M128
(0004) // Crystal: 8.0000Mhz
(0005) //#include <iom128v.h>
(0006) //#include <macros.h>
(0007) #include "2008.h"
(0008)
(0009) int I_Timer=0;
(0010) int Field = 512;
(0011) uint xx[512];
(0012) //#define portout (*(volatile unsigned char*)0x1100)
(0013)
(0014) void port_init(void)
(0015) {
(0016) PORTA = 0XFF;
_port_init:
02C4 EF8F LDI R24,0xFF
02C5 BB8B OUT 0x1B,R24
(0017) DDRA = 0XFF;
02C6 BB8A OUT 0x1A,R24
(0018) PORTF = 0XFF;
02C7 93800062 STS 0x62,R24
(0019) DDRF = 0XFF;
02C9 93800061 STS 0x61,R24
(0020) PORTB = 0xFF;
02CB BB88 OUT 0x18,R24
(0021) DDRB = 0xF7;
02CC EF87 LDI R24,0xF7
02CD BB87 OUT 0x17,R24
(0022) PORTD = 0xFF;
02CE EF8F LDI R24,0xFF
02CF BB82 OUT 0x12,R24
(0023) DDRD = 0xFF;
02D0 BB81 OUT 0x11,R24
(0024) PORTE = 0xFF;
02D1 B983 OUT 0x03,R24
(0025) DDRE = 0xFF;
02D2 B982 OUT 0x02,R24
(0026) PORTG = 0XFF;
02D3 93800065 STS 0x65,R24
(0027) DDRG = 0Xf7;
02D5 EF87 LDI R24,0xF7
02D6 93800064 STS 0x64,R24
02D8 9508 RET
(0028) }
(0029)
(0030) //TIMER0 initialize - prescale:1024
(0031) // WGM: Normal
(0032) // desired value: 20mSec
(0033) // actual value: 19.968mSec (0.2%)
(0034) void timer0_init(void)
(0035) {
(0036) TCCR0 = 0x00; //stop
_timer0_init:
02D9 2422 CLR R2
02DA BE23 OUT 0x33,R2
(0037) ASSR = 0x00; //set async mode
02DB BE20 OUT 0x30,R2
(0038) TCNT0 = 0x64; //set count
02DC E684 LDI R24,0x64
02DD BF82 OUT 0x32,R24
(0039) OCR0 = 0x9C;
02DE E98C LDI R24,0x9C
02DF BF81 OUT 0x31,R24
(0040) TCCR0 = 0x07; //start timer
02E0 E087 LDI R24,7
02E1 BF83 OUT 0x33,R24
02E2 9508 RET
_timer0_ovf_isr:
02E3 922A ST R2,-Y
02E4 923A ST R3,-Y
02E5 938A ST R24,-Y
02E6 939A ST R25,-Y
02E7 93EA ST R30,-Y
02E8 B62F IN R2,0x3F
02E9 922A ST R2,-Y
(0041) }
(0042)
(0043) #pragma interrupt_handler timer0_ovf_isr:17
(0044) void timer0_ovf_isr(void)
(0045) {
(0046) I_Timer++;
02EA 91800100 LDS R24,0x100
02EC 91900101 LDS R25,0x101
02EE 9601 ADIW R24,1
02EF 93900101 STS 0x101,R25
02F1 93800100 STS 0x100,R24
(0047) if(I_Timer == 50)
02F3 3382 CPI R24,0x32
02F4 E0E0 LDI R30,0
02F5 079E CPC R25,R30
02F6 F461 BNE 0x0303
(0048) {
(0049) PORTG ^= 0x10;
02F7 E180 LDI R24,0x10
02F8 90200065 LDS R2,0x65
02FA 2628 EOR R2,R24
02FB 92200065 STS 0x65,R2
(0050) I_Timer =0;
02FD 2422 CLR R2
02FE 2433 CLR R3
02FF 92300101 STS 0x101,R3
0301 92200100 STS 0x100,R2
(0051) }
(0052) TCNT0 = 0x64; //reload counter value
0303 E684 LDI R24,0x64
0304 BF82 OUT 0x32,R24
0305 9029 LD R2,Y+
0306 BE2F OUT 0x3F,R2
0307 91E9 LD R30,Y+
0308 9199 LD R25,Y+
0309 9189 LD R24,Y+
030A 9039 LD R3,Y+
030B 9029 LD R2,Y+
030C 9518 RETI
(0053) }
(0054)
(0055) //call this routine to initialize all peripherals
(0056) void init_devices(void)
(0057) {
(0058) //stop errant interrupts until set up
(0059) CLI(); //disable all interrupts
_init_devices:
030D 94F8 BCLR 7
(0060) XDIV = 0x00; //xtal divider
030E 2422 CLR R2
030F BE2C OUT 0x3C,R2
(0061) XMCRA = 0x00; //external memory
0310 9220006D STS 0x6D,R2
(0062) port_init();
0312 DFB1 RCALL _port_init
(0063) timer0_init();
0313 DFC5 RCALL _timer0_init
(0064) MCUCR = 0x00;
0314 2422 CLR R2
0315 BE25 OUT 0x35,R2
(0065) EICRA = 0x00; //extended ext ints
0316 9220006A STS 0x6A,R2
(0066) EICRB = 0x00; //extended ext ints
0318 BE2A OUT 0x3A,R2
(0067) EIMSK = 0x00;
0319 BE29 OUT 0x39,R2
(0068) TIMSK = 0x01; //timer interrupt sources
031A E081 LDI R24,1
031B BF87 OUT 0x37,R24
(0069) ETIMSK = 0x00; //extended timer interrupt sources
031C 9220007D STS 0x7D,R2
(0070) SEI(); //re-enable interrupts
031E 9478 BSET 7
031F 9508 RET
_main:
readXDIV --> Y+5
j --> R22
i --> R20
0320 9724 SBIW R28,4
(0071) //all peripherals are now initialized
(0072) }
(0073) void main()
(0074) {
(0075) int i,j;
(0076) unsigned char readXDIV;
(0077)
(0078) init_devices();
0321 DFEB RCALL _init_devices
(0079)
(0080)
(0081)
(0082) initLCDM(); //初始化LCD
0322 D054 RCALL _initLCDM
(0083) Welcome_interface(); //显示欢迎界面
0323 D109 RCALL _Welcome_interface
(0084)
(0085) SdCmd(0x10,0x29); LCD_ChkBusy();
0324 E229 LDI R18,0x29
0325 E030 LDI R19,0
0326 E100 LDI R16,0x10
0327 E010 LDI R17,0
0328 D0BE RCALL _SdCmd
0329 D0F5 RCALL _LCD_ChkBusy
(0086) SdCmd(0xf1,0x0f);LCD_ChkBusy(); //设置字型大小
032A E02F LDI R18,0xF
032B E030 LDI R19,0
032C EF01 LDI R16,0xF1
032D E010 LDI R17,0
032E D0B8 RCALL _SdCmd
032F D0EF RCALL _LCD_ChkBusy
(0087) ShowText(6,2,"测试 Flash AT45DB161D 读写");
0330 E283 LDI R24,0x23
0331 E091 LDI R25,1
0332 8399 STD Y+1,R25
0333 8388 STD Y+0,R24
0334 E022 LDI R18,2
0335 E030 LDI R19,0
0336 E006 LDI R16,6
0337 E010 LDI R17,0
0338 D147 RCALL _ShowText
(0088) for ( i=1; i<=48;i++)
0339 E041 LDI R20,1
033A E050 LDI R21,0
(0089) {
(0090) PORTG &= 0x04;
033B 91800065 LDS R24,0x65
033D 7084 ANDI R24,4
033E 93800065 STS 0x65,R24
(0091) PORTG ^= 0X01;
0340 E081 LDI R24,1
0341 90200065 LDS R2,0x65
0343 2628 EOR R2,R24
0344 92200065 STS 0x65,R2
(0092) PORTG ^= 0x02;
0346 E082 LDI R24,2
0347 90200065 LDS R2,0x65
0349 2628 EOR R2,R24
034A 92200065 STS 0x65,R2
034C 5F4F SUBI R20,0xFF
034D 4F5F SBCI R21,0xFF
034E E380 LDI R24,0x30
034F E090 LDI R25,0
0350 1784 CP R24,R20
0351 0795 CPC R25,R21
0352 F744 BGE 0x033B
(0093) }
(0094) //=============================
(0095)
(0096) df_init(); //端口初始化
0353 940E0086 CALL _df_init
(0097) j=0;
0355 2766 CLR R22
0356 2777 CLR R23
(0098) /*kl:
(0099) for(i=0;i<512;i++)
(0100) xx[i]=3; //初始化
(0101)
(0102) //测试写
(0103) df_write_open(4099*Field);
(0104) //for(i=0;i<5;i++)
(0105) // {
(0106) df_write(xx,512);
(0107) // }
(0108) df_write_close();
(0109) j++;
(0110)
(0111) if(j<10)
(0112) {
(0113) goto kl;
(0114) }
(0115)
(0116) */
(0117) // Write_page(2049,0,xx,512); //读页 一 页地址, 二页内地址, 三 数组存放取出来的数, 四 取多少个字节
(0118) //=============================================
(0119) df_read_open(4099*Field);
0357 91200102 LDS R18,0x102
0359 91300103 LDS R19,0x103
035B E003 LDI R16,3
035C E110 LDI R17,0x10
035D 940E0637 CALL empy16s
035F 940E00AE CALL _df_read_open
(0120) // for(j=0;j<5;j++)
(0121) // {
(0122) df_read(xx,512);
0361 E020 LDI R18,0
0362 E032 LDI R19,2
0363 E406 LDI R16,0x46
0364 E011 LDI R17,1
0365 940E01DE CALL _df_read
(0123) // }
(0124) // df_read_close();
(0125) // Page_Scrape(2049); //页擦除
(0126) // Read_Page(2049,0,xx,512); //读页 一 页地址, 二页内地址, 三 数组存放取出来的数, 四 取多少个字节
(0127) // df_read(1,1,xx,128);
(0128)
(0129) ShowNumber(0,0,512,xx);
0367 E486 LDI R24,0x46
0368 E091 LDI R25,1
0369 839B STD Y+3,R25
036A 838A STD Y+2,R24
036B E080 LDI R24,0
036C E092 LDI R25,2
036D 8399 STD Y+1,R25
036E 8388 STD Y+0,R24
036F 2722 CLR R18
0370 2733 CLR R19
0371 2700 CLR R16
0372 2711 CLR R17
0373 D12D RCALL _ShowNumber
(0130)
(0131) //=========================
(0132) while(1)
0374 CFFF RJMP 0x0374
0375 9624 ADIW R28,4
0376 9508 RET
(0133) {
(0134) ;// portout = 0xaa;
(0135) }
(0136) }
(0137) //============================
(0138) void initLCDM(void)
(0139) {
(0140) PORTF |= 0XFF;
_initLCDM:
0377 91800062 LDS R24,0x62
0379 6F8F ORI R24,0xFF
037A 93800062 STS 0x62,R24
(0141) SetCS;
037C 9A96 SBI 0x12,6
(0142) SetRD;
037D 9A95 SBI 0x12,5
(0143) SetWR;
037E 9A97 SBI 0x12,7
(0144) SetRS;
037F 9A18 SBI 0x03,0
(0145) // SetRST;
(0146) //delay_ms(30);
(0147) //ClrRST;
(0148) //delay_ms(800);
(0149) // SetRST;
(0150) //delay_ms(10);//
(0151) SdCmd(0xa0,0x07); LCD_ChkBusy(); //使能 BUSY 输出
0380 E027 LDI R18,7
0381 E030 LDI R19,0
0382 EA00 LDI R16,0xA0
0383 E010 LDI R17,0
0384 D062 RCALL _SdCmd
0385 D099 RCALL _LCD_ChkBusy
(0152) SdCmd(0x81,0x40); LCD_ChkBusy(); //by default
0386 E420 LDI R18,0x40
0387 E030 LDI R19,0
0388 E801 LDI R16,0x81
0389 E010 LDI R17,0
038A D05C RCALL _SdCmd
038B D093 RCALL _LCD_ChkBusy
(0153) SdCmd(0x00,0xCD); LCD_ChkBusy(); //Whole Chip LCD Controller Reg(Char Mode)
038C EC2D LDI R18,0xCD
038D E030 LDI R19,0
038E 2700 CLR R16
038F 2711 CLR R17
0390 D056 RCALL _SdCmd
0391 D08D RCALL _LCD_ChkBusy
(0154) SdCmd(0x01,0xf2); LCD_ChkBusy(); //BUSY=HiPolity, ClockOut=enable, InternalFreq=4MHz
0392 EF22 LDI R18,0xF2
0393 E030 LDI R19,0
0394 E001 LDI R16,1
0395 E010 LDI R17,0
0396 D050 RCALL _SdCmd
0397 D087 RCALL _LCD_ChkBusy
(0155) SdCmd(0x10,0x29); LCD_ChkBusy(); //Whole Chip Cursor Control Reg(disable cursor)
0398 E229 LDI R18,0x29
0399 E030 LDI R19,0
039A E100 LDI R16,0x10
039B E010 LDI R17,0
039C D04A RCALL _SdCmd
039D D081 RCALL _LCD_ChkBusy
(0156) SdCmd(0x11,0x10); LCD_ChkBusy(); //Distance of Words or Lines Reg(cursor=1,gap=0)
039E E120 LDI R18,0x10
039F E030 LDI R19,0
03A0 E101 LDI R16,0x11
03A1 E010 LDI R17,0
03A2 D044 RCALL _SdCmd
03A3 D07B RCALL _LCD_ChkBusy
(0157) SdCmd(0x90,0x05); LCD_ChkBusy(); //Shift Clock Control Reg(320x240,69Hz)
03A4 E025 LDI R18,5
03A5 E030 LDI R19,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -