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

📄 eeprom.lst

📁 IAR5.2下 AT91SAM9260 ARM 对 MCP2515 控制源化码
💻 LST
📖 第 1 页 / 共 4 页
字号:
   \   00000064   500090E2           ADDS     R0,R0,#+80
   \   00000068   0080B0E1           MOVS     R8,R0
    193          
    194              TWI_Read(AT91C_BASE_TWI, slvAddr, address, data, size);
   \   0000006C   08702DE5           STR      R7,[SP, #-8]!
   \   00000070   0630B0E1           MOVS     R3,R6
   \   00000074   0520B0E1           MOVS     R2,R5
   \   00000078   0810B0E1           MOVS     R1,R8
   \   0000007C   FF1011E2           ANDS     R1,R1,#0xFF      ;; Zero extend
   \   00000080   ........           LDR      R0,??DataTable4  ;; 0xfffac000
   \   00000084   ........           BL       TWI_Read
   \   00000088   08D08DE2           ADD      SP,SP,#+8        ;; stack cleaning
    195          	
    196              return 0;
   \   0000008C   0000A0E3           MOV      R0,#+0
   \                     ??AT24C08_Read_Page_2:
   \   00000090   F081BDE8           POP      {R4-R8,PC}       ;; return
    197          }
    198          
    199          
    200          //*============================================================================
    201          //* 函数名称:AT24C08_Read
    202          //* 函数功能:从 AT24C08 读取数据
    203          //* 入口参数:address	: 读取数据地址(0~1023)
    204          //*	      *data	: 读出数据存放的起始地址
    205          //*	      size	: 读取数据的长度
    206          //* 返回值  : 0: 读取正常
    207          //*	      1: 读取数据时发生错误	
    208          //*	      2: 无
    209          //*	      3: 读取地址范围出错
    210          //*	      4: 数据长度范围出错
    211          //*============================================================================

   \                                 In section .text, align 4, keep-with-next
    212          char AT24C08_Read(int address, char *data, int size)
    213          {
   \                     AT24C08_Read:
   \   00000000   F8432DE9           PUSH     {R3-R9,LR}
   \   00000004   0090B0E1           MOVS     R9,R0
   \   00000008   0180B0E1           MOVS     R8,R1
   \   0000000C   0240B0E1           MOVS     R4,R2
    214              int page;
    215              int pageAddr,cnt;
    216          	
    217              TWI_Open();
   \   00000010   ........           BL       TWI_Open
    218          	
    219              if( (address >= AT24C08_MAX_ADDR)||(address<0) )			// AT24C08 寻址范围为(0~1023)共1204字节
   \   00000014   400E59E3           CMP      R9,#+1024
   \   00000018   010000AA           BGE      ??AT24C08_Read_0
   \   0000001C   000059E3           CMP      R9,#+0
   \   00000020   0200005A           BPL      ??AT24C08_Read_1
    220              {
    221                  // DBGU_Printk("Write AT24C08 address error !\r\n");
    222                  TWI_Close();
   \                     ??AT24C08_Read_0:
   \   00000024   ........           BL       TWI_Close
    223          	return 3;
   \   00000028   0300A0E3           MOV      R0,#+3
   \   0000002C   400000EA           B        ??AT24C08_Read_2
    224              }
    225          	
    226              if( (size > (AT24C08_MAX_BYTE-address))||(size<0) )			// AT24C08 最大可写 1024 字节
   \                     ??AT24C08_Read_1:
   \   00000030   400E79E2           RSBS     R0,R9,#+1024
   \   00000034   040050E1           CMP      R0,R4
   \   00000038   010000BA           BLT      ??AT24C08_Read_3
   \   0000003C   000054E3           CMP      R4,#+0
   \   00000040   0200005A           BPL      ??AT24C08_Read_4
    227              {
    228          	// DBGU_Printk("Write AT24C08 word leng error !\r\n");
    229          	TWI_Close();
   \                     ??AT24C08_Read_3:
   \   00000044   ........           BL       TWI_Close
    230                  return 4;
   \   00000048   0400A0E3           MOV      R0,#+4
   \   0000004C   380000EA           B        ??AT24C08_Read_2
    231              }
    232          	
    233              page = (address / PAGE_SIZE);				// 获取起始页值
   \                     ??AT24C08_Read_4:
   \   00000050   0900B0E1           MOVS     R0,R9
   \   00000054   401FA0E3           MOV      R1,#+256
   \   00000058   ........           BL       __aeabi_idivmod
   \   0000005C   0050B0E1           MOVS     R5,R0
    234              pageAddr = address % PAGE_SIZE;				// 获取页面起始地址
   \   00000060   0900B0E1           MOVS     R0,R9
   \   00000064   401FA0E3           MOV      R1,#+256
   \   00000068   ........           BL       __aeabi_idivmod
   \   0000006C   0160B0E1           MOVS     R6,R1
    235          
    236              if(size < (PAGE_SIZE - pageAddr) )				// 要读的字节数不足一页
   \   00000070   400F76E2           RSBS     R0,R6,#+256
   \   00000074   000054E1           CMP      R4,R0
   \   00000078   070000AA           BGE      ??AT24C08_Read_5
    237              {
    238                  AT24C08_Read_Page(page, pageAddr, data, size);
   \   0000007C   0430B0E1           MOVS     R3,R4
   \   00000080   0820B0E1           MOVS     R2,R8
   \   00000084   0610B0E1           MOVS     R1,R6
   \   00000088   0500B0E1           MOVS     R0,R5
   \   0000008C   ........           BL       AT24C08_Read_Page
    239                  size = 0;
   \   00000090   0000A0E3           MOV      R0,#+0
   \   00000094   0040B0E1           MOVS     R4,R0
   \   00000098   0C0000EA           B        ??AT24C08_Read_6
    240              }
    241              else
    242              {
    243                  AT24C08_Read_Page(page, pageAddr, data, (256-pageAddr));
   \                     ??AT24C08_Read_5:
   \   0000009C   403F76E2           RSBS     R3,R6,#+256
   \   000000A0   0820B0E1           MOVS     R2,R8
   \   000000A4   0610B0E1           MOVS     R1,R6
   \   000000A8   0500B0E1           MOVS     R0,R5
   \   000000AC   ........           BL       AT24C08_Read_Page
    244                  size -= (PAGE_SIZE - pageAddr);
   \   000000B0   FF00E0E3           MVN      R0,#+255
   \   000000B4   000096E0           ADDS     R0,R6,R0
   \   000000B8   044090E0           ADDS     R4,R0,R4
    245                  cnt = PAGE_SIZE - pageAddr;
   \   000000BC   400F76E2           RSBS     R0,R6,#+256
   \   000000C0   0070B0E1           MOVS     R7,R0
    246                  page++;
   \   000000C4   015095E2           ADDS     R5,R5,#+1
    247                  pageAddr = 0;		
   \   000000C8   0000A0E3           MOV      R0,#+0
   \   000000CC   0060B0E1           MOVS     R6,R0
    248              }
    249              while(size > PAGE_SIZE)					// 读一页
   \                     ??AT24C08_Read_6:
   \   000000D0   0100A0E3           MOV      R0,#+1
   \   000000D4   400F80E3           ORR      R0,R0,#0x100
   \   000000D8   000054E1           CMP      R4,R0
   \   000000DC   0B0000BA           BLT      ??AT24C08_Read_7
    250              {
    251                  AT24C08_Read_Page(page, pageAddr, (data+cnt), PAGE_SIZE);
   \   000000E0   403FA0E3           MOV      R3,#+256
   \   000000E4   082097E0           ADDS     R2,R7,R8
   \   000000E8   0610B0E1           MOVS     R1,R6
   \   000000EC   0500B0E1           MOVS     R0,R5
   \   000000F0   ........           BL       AT24C08_Read_Page
    252                  page++;
   \   000000F4   015095E2           ADDS     R5,R5,#+1
    253                  pageAddr = 0;
   \   000000F8   0000A0E3           MOV      R0,#+0
   \   000000FC   0060B0E1           MOVS     R6,R0
    254                  size -= PAGE_SIZE;
   \   00000100   FF00E0E3           MVN      R0,#+255
   \   00000104   044090E0           ADDS     R4,R0,R4
    255                  cnt  += PAGE_SIZE;
   \   00000108   407F97E2           ADDS     R7,R7,#+256
   \   0000010C   EFFFFFEA           B        ??AT24C08_Read_6
    256              }
    257              if(size > 0)					// 读最后一页
   \                     ??AT24C08_Read_7:
   \   00000110   010054E3           CMP      R4,#+1
   \   00000114   040000BA           BLT      ??AT24C08_Read_8
    258                  AT24C08_Read_Page(page, pageAddr, (data+cnt), size);
   \   00000118   0430B0E1           MOVS     R3,R4
   \   0000011C   082097E0           ADDS     R2,R7,R8
   \   00000120   0610B0E1           MOVS     R1,R6
   \   00000124   0500B0E1           MOVS     R0,R5
   \   00000128   ........           BL       AT24C08_Read_Page
    259          	
    260              TWI_Close();
   \                     ??AT24C08_Read_8:
   \   0000012C   ........           BL       TWI_Close
    261              return 0;
   \   00000130   0000A0E3           MOV      R0,#+0
   \                     ??AT24C08_Read_2:
   \   00000134   F283BDE8           POP      {R1,R4-R9,PC}    ;; return
    262          }
    263          
    264          
    265          #define DataLeng    1024
    266          //*============================================================================
    267          //* 函数名称: AT24C08_Test()
    268          //* 函数功能:测试AT24C08
    269          //* 入口参数:无
    270          //* 返回值  :无
    271          //*============================================================================

   \                                 In section .text, align 4, keep-with-next
    272          void AT24C08_Test(void)
    273          {
   \                     AT24C08_Test:
   \   00000000   70402DE9           PUSH     {R4-R6,LR}
   \   00000004   C0DE4DE2           SUB      SP,SP,#+3072
    274              int i, j, error = 0;
   \   00000008   0000A0E3           MOV      R0,#+0
   \   0000000C   0060B0E1           MOVS     R6,R0
    275              char write[DataLeng], read[DataLeng], zero[DataLeng];
    276          	
    277              DBGU_Printk("\r\n EEPROM Test:\r\n");
   \   00000010   AC019FE5           LDR      R0,??AT24C08_Test_0+0x4  ;; `?<Constant "\\r\\n EEPROM Test:\\r\\n">`
   \   00000014   ........           BL       DBGU_Printk
    278          
    279              // 初始化数据
    280              for(i=0; i<DataLeng; i++)
   \   00000018   0000A0E3           MOV      R0,#+0
   \   0000001C   0040B0E1           MOVS     R4,R0
   \                     ??AT24C08_Test_1:
   \   00000020   400E54E3           CMP      R4,#+1024
   \   00000024   0F0000AA           BGE      ??AT24C08_Test_2
    281              {
    282                  j = i;
   \   00000028   0450B0E1           MOVS     R5,R4
    283                  while(j > 255)
   \                     ??AT24C08_Test_3:
   \   0000002C   400F55E3           CMP      R5,#+256
   \   00000030   020000BA           BLT      ??AT24C08_Test_4
    284                      j -= 256;
   \   00000034   FF00E0E3           MVN      R0,#+255
   \   00000038   055090E0           ADDS     R5,R0,R5
   \   0000003C   FAFFFFEA           B        ??AT24C08_Test_3
    285                  write[i] = j;
   \                     ??AT24C08_Test_4:
   \   00000040   800E8DE2           ADD      R0,SP,#+2048
   \   00000044   0050C4E7           STRB     R5,[R4, +R0]
    286                  read[i] = 0;
   \   00000048   400E8DE2           ADD      R0,SP,#+1024
   \   0000004C   0010A0E3           MOV      R1,#+0
   \   00000050   0010C4E7           STRB     R1,[R4, +R0]
    287                  zero[i] = 0;
   \   00000054   0D00B0E1           MOVS     R0,SP
   \   00000058   0010A0E3           MOV      R1,#+0
   \   0000005C   0010C4E7           STRB     R1,[R4, +R0]
    288              }	
   \   00000060   014094E2           ADDS     R4,R4,#+1
   \   00000064   EDFFFFEA           B        ??AT24C08_Test_1
    289          
    290              DBGU_Printk("write data to EEPROM:\r\n");
   \                     ??AT24C08_Test_2:
   \   00000068   58019FE5           LDR      R0,??AT24C08_Test_0+0x8  ;; `?<Constant "write data to EEPROM:\\r\\n">`
   \   0000006C   ........           BL       DBGU_Printk
    291              for(i = 0; i<DataLeng; i++)
   \   00000070   0000A0E3           MOV      R0,#+0
   \   00000074   0040B0E1           MOVS     R4,R0
   \                     ??AT24C08_Test_5:
   \   00000078   400E54E3           CMP      R4,#+1024
   \   0000007C   050000AA           BGE      ??AT24C08_Test_6
    292                  printf("%3d ",write[i]);
   \   00000080   800E8DE2           ADD      R0,SP,#+2048
   \   00000084   0010D4E7           LDRB     R1,[R4, +R0]

⌨️ 快捷键说明

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