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

📄 at45db161.txt

📁 使用STR710的SPI接口访问外部EEPROM的例子程序.使用KEIL UV3编译.使用了MDK3.05操作系统.
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000188  8980              LDRH     r0,[r0,#0xc]
00018a  2101              MOVS     r1,#1
00018c  03c9              LSLS     r1,r1,#15
00018e  4308              ORRS     r0,r0,r1
000190  499d              LDR      r1,|L1.1032|
000192  8188              STRH     r0,[r1,#0xc]
;;;137    
;;;138    	return tmp;
000194  0020              MOVS     r0,r4
;;;139    }
000196  bc10              POP      {r4}
000198  bc08              POP      {r3}
00019a  4718              BX       r3
                          ENDP

                  AT45_Ready PROC
;;;151    void AT45_Ready(void)
;;;152    {
00019c  b510              PUSH     {r4,lr}
;;;153    	u8 tmp = 0x00;
00019e  2400              MOVS     r4,#0
;;;154    
;;;155    	while(!(tmp & 0x80))
0001a0  e002              B        |L1.424|
;;;156    	{
;;;157    	   tmp = AT45_Read_REG();
                  |L1.418|
0001a2  f7ff fffe         BL       AT45_Read_REG
0001a6  0004              MOVS     r4,r0
                  |L1.424|
0001a8  2080              MOVS     r0,#0x80              ;155
0001aa  4204              TST      r4,r0                 ;155
0001ac  d0f9              BEQ      |L1.418|              ;155
;;;158    	}
;;;159    }
0001ae  bc10              POP      {r4}
0001b0  bc08              POP      {r3}
0001b2  4718              BX       r3
                          ENDP

                  Detect_AT45DB PROC
;;;170    u8 Detect_AT45DB(void)
;;;171    {
0001b4  b510              PUSH     {r4,lr}
;;;172    	u8 temp;
;;;173    
;;;174    	AT45_Ready(); //wait until dataflash is ready
0001b6  f7ff fffe         BL       AT45_Ready
;;;175    	temp = AT45_Read_REG();
0001ba  f7ff fffe         BL       AT45_Read_REG
0001be  0004              MOVS     r4,r0
;;;176    
;;;177    	return (temp>>2)&0x0f;
0001c0  06a0              LSLS     r0,r4,#26
0001c2  0f00              LSRS     r0,r0,#28
;;;178    }
0001c4  bc10              POP      {r4}
0001c6  bc08              POP      {r3}
0001c8  4718              BX       r3
                          ENDP

                  WriteMultiByteToBuffer1 PROC
;;;213    void WriteMultiByteToBuffer1( u16 Address, u8 *Data, u16 len )
;;;214    {
0001ca  b5f8              PUSH     {r3-r7,lr}
0001cc  0004              MOVS     r4,r0
0001ce  000e              MOVS     r6,r1
0001d0  0017              MOVS     r7,r2
;;;215    	u16 i;
;;;216    	if ( len == 0 )
0001d2  2f00              CMP      r7,#0
0001d4  d102              BNE      |L1.476|
;;;217    	{
;;;218    		return ;
;;;219    	}
;;;220    	AT45_Chip_Select_ENABLE;
;;;221    	BPSI_DataSendReceive( BUFFER1_WRITE );		// 写入命令
;;;222    	BPSI_DataSendReceive( 0 );
;;;223    	BPSI_DataSendReceive( Address / 256 );			// 2位高位地址
;;;224    	BPSI_DataSendReceive( Address % 256 );		// 8位低位地址
;;;225    	for ( i = 0; i < len; i++ )
;;;226    	{
;;;227    		BPSI_DataSendReceive( *Data );			// 写入数据
;;;228    		Data++;
;;;229    	}
;;;230    	AT45_Chip_Select_DISABLE;
;;;231    }
                  |L1.470|
0001d6  bcf8              POP      {r3-r7}
0001d8  bc08              POP      {r3}
0001da  4718              BX       r3
                  |L1.476|
0001dc  488a              LDR      r0,|L1.1032|          ;220
0001de  8980              LDRH     r0,[r0,#0xc]          ;220
0001e0  2101              MOVS     r1,#1                 ;220
0001e2  03c9              LSLS     r1,r1,#15             ;220
0001e4  4388              BICS     r0,r0,r1              ;220
0001e6  4988              LDR      r1,|L1.1032|          ;220
0001e8  8188              STRH     r0,[r1,#0xc]          ;220
0001ea  2084              MOVS     r0,#0x84              ;221
0001ec  f7ff fffe         BL       BPSI_DataSendReceive  ;221
0001f0  2000              MOVS     r0,#0                 ;222
0001f2  f7ff fffe         BL       BPSI_DataSendReceive  ;222
0001f6  0025              MOVS     r5,r4                 ;223
0001f8  17e1              ASRS     r1,r4,#31             ;223
0001fa  0e09              LSRS     r1,r1,#24             ;223
0001fc  1909              ADDS     r1,r1,r4              ;223
0001fe  0409              LSLS     r1,r1,#16             ;223
000200  0e08              LSRS     r0,r1,#24             ;223
000202  f7ff fffe         BL       BPSI_DataSendReceive  ;223
000206  17e1              ASRS     r1,r4,#31             ;224
000208  0e09              LSRS     r1,r1,#24             ;224
00020a  1909              ADDS     r1,r1,r4              ;224
00020c  1209              ASRS     r1,r1,#8              ;224
00020e  0209              LSLS     r1,r1,#8              ;224
000210  1a61              SUBS     r1,r4,r1              ;224
000212  0608              LSLS     r0,r1,#24             ;224
000214  0e00              LSRS     r0,r0,#24             ;224
000216  f7ff fffe         BL       BPSI_DataSendReceive  ;224
00021a  2000              MOVS     r0,#0                 ;225
00021c  9000              STR      r0,[sp,#0]            ;225
00021e  e008              B        |L1.562|              ;225
                  |L1.544|
000220  7830              LDRB     r0,[r6,#0]            ;227
000222  f7ff fffe         BL       BPSI_DataSendReceive  ;227
000226  1c76              ADDS     r6,r6,#1              ;228
000228  9800              LDR      r0,[sp,#0]            ;225
00022a  1c40              ADDS     r0,r0,#1              ;225
00022c  0400              LSLS     r0,r0,#16             ;225
00022e  0c00              LSRS     r0,r0,#16             ;225
000230  9000              STR      r0,[sp,#0]            ;225
                  |L1.562|
000232  9800              LDR      r0,[sp,#0]            ;225
000234  42b8              CMP      r0,r7                 ;225
000236  dbf3              BLT      |L1.544|              ;225
000238  4873              LDR      r0,|L1.1032|          ;230
00023a  8980              LDRH     r0,[r0,#0xc]          ;230
00023c  2101              MOVS     r1,#1                 ;230
00023e  03c9              LSLS     r1,r1,#15             ;230
000240  4308              ORRS     r0,r0,r1              ;230
000242  4971              LDR      r1,|L1.1032|          ;230
000244  8188              STRH     r0,[r1,#0xc]          ;230
000246  e7c6              B        |L1.470|
                          ENDP

                  ErasePage PROC
;;;269    void ErasePage(u16 PageNum)
;;;270    {
000248  b530              PUSH     {r4,r5,lr}
00024a  0004              MOVS     r4,r0
;;;271    	while ( IS_DATA_FLASH_BUSY()  );				// 等待芯片空闲
00024c  46c0              MOV      r8,r8
                  |L1.590|
00024e  f7ff fffe         BL       AT45_Read_REG
000252  2180              MOVS     r1,#0x80
000254  4208              TST      r0,r1
000256  d0fa              BEQ      |L1.590|
;;;272    	AT45_Chip_Select_ENABLE;
000258  486b              LDR      r0,|L1.1032|
00025a  8980              LDRH     r0,[r0,#0xc]
00025c  0209              LSLS     r1,r1,#8
00025e  4388              BICS     r0,r0,r1
000260  4969              LDR      r1,|L1.1032|
000262  8188              STRH     r0,[r1,#0xc]
;;;273    	PageNum <<= PAGE_RL;
000264  04a0              LSLS     r0,r4,#18
000266  0c04              LSRS     r4,r0,#16
;;;274    	BPSI_DataSendReceive(PAGE_ERASE);				// 命令
000268  2081              MOVS     r0,#0x81
00026a  f7ff fffe         BL       BPSI_DataSendReceive
;;;275    	BPSI_DataSendReceive(PageNum/256);			// 高7位地址
00026e  0025              MOVS     r5,r4
000270  17e1              ASRS     r1,r4,#31
000272  0e09              LSRS     r1,r1,#24
000274  1909              ADDS     r1,r1,r4
000276  0409              LSLS     r1,r1,#16
000278  0e08              LSRS     r0,r1,#24
00027a  f7ff fffe         BL       BPSI_DataSendReceive
;;;276    	BPSI_DataSendReceive(PageNum%256);			// 低6位地址
00027e  17e1              ASRS     r1,r4,#31
000280  0e09              LSRS     r1,r1,#24
000282  1909              ADDS     r1,r1,r4
000284  1209              ASRS     r1,r1,#8
000286  0209              LSLS     r1,r1,#8
000288  1a61              SUBS     r1,r4,r1
00028a  0608              LSLS     r0,r1,#24
00028c  0e00              LSRS     r0,r0,#24
00028e  f7ff fffe         BL       BPSI_DataSendReceive
;;;277    	BPSI_DataSendReceive(0);
000292  2000              MOVS     r0,#0
000294  f7ff fffe         BL       BPSI_DataSendReceive
;;;278    	AT45_Chip_Select_DISABLE;
000298  485b              LDR      r0,|L1.1032|
00029a  8980              LDRH     r0,[r0,#0xc]
00029c  2101              MOVS     r1,#1
00029e  03c9              LSLS     r1,r1,#15
0002a0  4308              ORRS     r0,r0,r1
0002a2  4959              LDR      r1,|L1.1032|
0002a4  8188              STRH     r0,[r1,#0xc]
;;;279    }
0002a6  bc30              POP      {r4,r5}
0002a8  bc08              POP      {r3}
0002aa  4718              BX       r3
                          ENDP

                  ReadMultiByteFromMainMemory PROC
;;;322    u8 ReadMultiByteFromMainMemory( u16 PageNum, u16 SubAddress, u8 *msg, u8 len )
;;;323    {
0002ac  b5ff              PUSH     {r0-r7,lr}
0002ae  b081              SUB      sp,sp,#4
0002b0  0005              MOVS     r5,r0
0002b2  000c              MOVS     r4,r1
;;;324    	u8 i;
;;;325    	i = 255;
0002b4  20ff              MOVS     r0,#0xff
0002b6  9000              STR      r0,[sp,#0]
;;;326    	if ( len == 0 )
0002b8  9804              LDR      r0,[sp,#0x10]
0002ba  2800              CMP      r0,#0
0002bc  d103              BNE      |L1.710|
;;;327    	{
;;;328    		return FALSE;
;;;329    	}
;;;330    	while ( IS_DATA_FLASH_BUSY() && i-- )
;;;331    	{
;;;332    		;
;;;333    	}
;;;334    	if ( i == 0 )
;;;335    	{
;;;336    		return FALSE;
;;;337    	}
;;;338    	PageNum <<= PAGE_RL;
;;;339    	AT45_Chip_Select_ENABLE;
;;;340    	BPSI_DataSendReceive( CONTINUOUS_ARRAY_READ );				// 命令
;;;341    	BPSI_DataSendReceive( PageNum / 256 );						// 高7位页地址
;;;342    	BPSI_DataSendReceive( ( ( PageNum % 256 ) & ADDR_MASK) | ( ( SubAddress / 256 ) & (~ADDR_MASK) ) );
;;;343    	/*低6位页地址和高2位页内地址*/
;;;344    	BPSI_DataSendReceive( SubAddress % 256 );						// 低8位页内地址
;;;345    	BPSI_DataSendReceive( 0 );
;;;346    	BPSI_DataSendReceive( 0 );
;;;347    	BPSI_DataSendReceive( 0 );
;;;348    	BPSI_DataSendReceive( 0 );
;;;349    	for ( i = 0; i < len; i++ )
;;;350    	{
;;;351    		*msg = BPSI_DataSendReceive(0xff);							// 读出数据
;;;352    		msg ++;
;;;353    	}
;;;354    	AT45_Chip_Select_DISABLE;
;;;355    	return TRUE;
;;;356    }
                  |L1.702|
0002be  b005              ADD      sp,sp,#0x14
0002c0  bcf0              POP      {r4-r7}
0002c2  bc08              POP      {r3}
0002c4  4718              BX       r3
                  |L1.710|
0002c6  46c0              MOV      r8,r8                 ;330
                  |L1.712|
0002c8  f7ff fffe         BL       AT45_Read_REG         ;330
0002cc  2180              MOVS     r1,#0x80              ;330
0002ce  4208              TST      r0,r1                 ;330
0002d0  d106              BNE      |L1.736|              ;330
0002d2  9800              LDR      r0,[sp,#0]            ;330
0002d4  1e41              SUBS     r1,r0,#1              ;330
0002d6  0609              LSLS     r1,r1,#24             ;330
0002d8  0e09              LSRS     r1,r1,#24             ;330
0002da  9100              STR      r1,[sp,#0]            ;330
0002dc  2800              CMP      r0,#0                 ;330
0002de  d1f3              BNE      |L1.712|              ;330
                  |L1.736|
0002e0  9800              LDR      r0,[sp,#0]            ;334
0002e2  2800              CMP      r0,#0                 ;334

⌨️ 快捷键说明

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