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

📄 mmc.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
##############################################################################
#                                                                            #
# IAR ARM ANSI C/C++ Compiler V4.31A/W32 EVALUATION    27/Nov/2007  14:04:54 #
# Copyright 1999-2005 IAR Systems. All rights reserved.                      #
#                                                                            #
#    Cpu mode        =  interwork                                            #
#    Endian          =  little                                               #
#    Stack alignment =  4                                                    #
#    Source file     =  G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\mmc_sd\mmc.c       #
#    Command line    =  G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\mmc_sd\mmc.c -D    #
#                       AT91SAM7X256 -D PULL_UP_USB -D USE_LED -lC           #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\FLASH_Debug\List\" -o                 #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\FLASH_Debug\Obj\" -z9 --debug         #
#                       --cpu_mode thumb --endian little --cpu ARM7TDMI      #
#                       --stack_align 4 --interwork -e --fpu None            #
#                       --dlib_config "C:\Program Files\IAR                  #
#                       Systems\Embedded Workbench 4.0                       #
#                       Evaluation\ARM\LIB\dl4tptinl8f.h" -I                 #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\srcIAR\" -I                           #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\src\" -I                           #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\" -I                            #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\FILESYSTEM\inc\" -I             #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\MASSSTORAGE\inc\" -I            #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\AT91SAM7X256\" -I               #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\inc\" -I                           #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\mmc_sd\" -I                     #
#                       "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass    #
#                       Storage\compil\..\..\COMMON_FS_MS\" -I "C:\Program   #
#                       Files\IAR Systems\Embedded Workbench 4.0             #
#                       Evaluation\ARM\INC\"                                 #
#    List file       =  G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass     #
#                       Storage\compil\FLASH_Debug\List\mmc.lst              #
#    Object file     =  G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass     #
#                       Storage\compil\FLASH_Debug\Obj\mmc.r79               #
#                                                                            #
#                                                                            #
##############################################################################

G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\mmc_sd\mmc.c
      1          /*-----------------------------------------------------------------------*/
      2          /* MMC/SDC (in SPI mode) control module  2006                   */
      3          /*-----------------------------------------------------------------------*/
      4          
      5          #include <stdio.h>
      6          #include "Board.h"
      7          //#include "mmc.h"
      8          #include "dbgu.h"
      9          #include "trace.h"
     10          #include "string.h"
     11          
     12          #include "mmc.h"     //为了 AT91F_ReadMedia() ,AT91F_Flash_Write_Address()能与mmc的参数同步
     13          
     14          #include "po_types.h"
     15          
     16          #define CARD_WP_PIN      AT91C_PIO_PA16
     17          #define CARD_INS_PIN     AT91C_PIO_PA15
     18          static AT91PS_PIO  pPIOA = AT91C_BASE_PIOA;
     19          static AT91PS_SPI  pSPI  = AT91C_BASE_SPI0;
     20          
     21          #define CARD_SELECT_PIN  AT91C_PA13_SPI0_NPCS1
     22          #define SPI_CSR_NUM      0
     23          
     24          #define SPI_SCBR_MIN     2
     25          
     26          
     27          /* MMC/SD command (in SPI) */
     28          #define CMD0	(0x40+0)	/* GO_IDLE_STATE */
     29          #define CMD1	(0x40+1)	/* SEND_OP_COND */
     30          #define CMD9	(0x40+9)	/* SEND_CSD */
     31          #define CMD10	(0x40+10)	/* SEND_CID */
     32          #define CMD12	(0x40+12)	/* STOP_TRANSMISSION */
     33          #define CMD17	(0x40+17)	/* READ_SINGLE_BLOCK */
     34          #define CMD18	(0x40+18)	/* READ_MULTIPLE_BLOCK */
     35          #define CMD24	(0x40+24)	/* WRITE_BLOCK */
     36          #define CMD25	(0x40+25)	/* WRITE_MULTIPLE_BLOCK */
     37          #define CMD58	(0x40+58)	/* READ_OCR */
     38          
     39          
     40          /* Control signals (Platform dependent) */
     41          #define SELECT()	(pPIOA->PIO_CODR = CARD_SELECT_PIN) /* MMC CS = L */
     42          #define	DESELECT()	(pPIOA->PIO_SODR = CARD_SELECT_PIN) /* MMC CS = H */
     43          
     44          #define SOCKWP		CARD_WP_PIN			/* Write protect switch (PB5) */
     45          #define SOCKINS		CARD_INS_PIN		/* Card detect switch (PB4) */
     46          
     47          // #define POWER_ON()	PORTE &= ~0x80	/* Socke power (PE7) */
     48          // #define POWER_OFF()	PORTE |=  0x80
     49          
     50          #define POWER_ON()
     51          #define POWER_OFF()
     52          
     53          static volatile

   \                                 In segment DATA_I, align 1, align-sorted
     54          DSTATUS Stat = STA_NOINIT;	/* Disk status */
   \                     Stat:
   \   00000000                      DS8 1
   \   00000001                      REQUIRE `?<Initializer for Stat>`
   \   00000001                      DS8 1
   \   00000002                      REQUIRE `?<Initializer for Timer>`
     55          
     56          // AT91: thru systime
     57          static volatile
     58          BYTE Timer;			/* 100Hz decrement timer */
     59          
     60          
     61          
     62          /*-----------------------------------------------------------------------*/
     63          /* Module Private Functions                                              */
     64          
     65          
     66          #if 0
     67          /*--------------------------------*/
     68          /* Transmit a byte to MMC via SPI */
     69          /* (Platform dependent)           */
     70          
     71          #define xmit_spi(dat) 	SPDR=(dat); loop_until_bit_is_set(SPSR,SPIF)
     72          
     73          /*---------------------------------*/
     74          /* Receive a byte from MMC via SPI */
     75          /* (Platform dependent)            */
     76          
     77          static
     78          BYTE rcvr_spi()
     79          {
     80          	SPDR = 0xFF;
     81          	loop_until_bit_is_set(SPSR, SPIF);
     82          	return SPDR;
     83          }
     84          
     85          /* Alternative macro to receive data fast */
     86          #define rcvr_spi_m(dst)	SPDR=0xFF; loop_until_bit_is_set(SPSR,SPIF); *(dst)=SPDR
     87          
     88          #endif
     89          
     90          extern void AT91F_DBGU_Printk(	char *buffer)   ;
     91          extern void AT91F_DBGU_Init(void) ;
     92          //********************************************************
     93          /*void AT91F_DBGU_Printk(	char *buffer)
     94          {
     95              while(*buffer != '\0') {
     96          	while (!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));
     97          	AT91F_US_PutChar((AT91PS_USART)AT91C_BASE_DBGU, *buffer++);
     98              }
     99          }
    100          
    101          void AT91F_DBGU_Init(void)
    102          {
    103          
    104          }
    105           */
    106          //*****************************************************
    107          

   \                                 In segment CODE, align 4, keep-with-next
    108          static void AT91_spiSetSpeed(BYTE speed)
    109          {
    110          	DWORD reg;
    111          
    112          	if ( speed < SPI_SCBR_MIN ) speed = SPI_SCBR_MIN;
   \                     AT91_spiSetSpeed:
   \   00000000   0228               CMP         R0,#+2
   \   00000002   00D2               BCS         ??AT91_spiSetSpeed_0
   \   00000004   0220               MOV         R0,#+2
    113          	if ( speed > 1 ) speed &= 0xFE;
    114          
    115          	reg = pSPI->SPI_CSR[SPI_CSR_NUM];
   \                     ??AT91_spiSetSpeed_0:
   \   00000006   ....               LDR         R1,??DataTable4    ;; 0xfffe0030
   \   00000008   0A68               LDR         R2,[R1, #+0]
    116          	reg = ( reg & ~(AT91C_SPI_SCBR) ) | ( (DWORD)speed << 8 );
    117          	pSPI->SPI_CSR[SPI_CSR_NUM] = reg;
   \   0000000A   044B               LDR         R3,??AT91_spiSetSpeed_1  ;; 0xffff00ff
   \   0000000C   1340               AND         R3,R2
   \   0000000E   FE22               MOV         R2,#+254
   \   00000010   0240               AND         R2,R0
   \   00000012   1002               LSL         R0,R2,#+8
   \   00000014   1843               ORR         R0,R3
   \   00000016   0860               STR         R0,[R1, #+0]
    118          }
   \   00000018   00B0               ADD         SP,#+0
   \   0000001A   7047               BX          LR                 ;; return
   \                     ??AT91_spiSetSpeed_1:
   \   0000001C   FF00FFFF           DC32        0xffff00ff
    119          

   \                                 In segment CODE, align 4, keep-with-next
    120          static BYTE AT91_spi(BYTE outgoing)
    121          {
   \                     AT91_spi:
   \   00000000   0649               LDR         R1,??AT91_spi_0    ;; 0xfffe0010
    122          	BYTE incoming;
    123          
    124          	while( !( pSPI->SPI_SR & AT91C_SPI_TDRE ) ); // transfer compl. wait
   \                     ??AT91_spi_1:
   \   00000002   0A68               LDR         R2,[R1, #+0]
   \   00000004   9207               LSL         R2,R2,#+30
   \   00000006   FCD5               BPL         ??AT91_spi_1
    125          	pSPI->SPI_TDR = (WORD)( outgoing );
   \   00000008   054A               LDR         R2,??AT91_spi_0+0x4  ;; 0xfffe000c
   \   0000000A   1060               STR         R0,[R2, #+0]
    126          	while( !( pSPI->SPI_SR & AT91C_SPI_RDRF ) ); // wait for char
   \                     ??AT91_spi_2:
   \   0000000C   0868               LDR         R0,[R1, #+0]
   \   0000000E   C007               LSL         R0,R0,#+31
   \   00000010   FCD5               BPL         ??AT91_spi_2
    127          	incoming = (BYTE)( pSPI->SPI_RDR );
   \   00000012   0448               LDR         R0,??AT91_spi_0+0x8  ;; 0xfffe0008
   \   00000014   0068               LDR         R0,[R0, #+0]
   \   00000016   0006               LSL         R0,R0,#+24
   \   00000018   000E               LSR         R0,R0,#+24
    128          
    129          	return incoming;
   \   0000001A   7047               BX          LR                 ;; return
   \                     ??AT91_spi_0:
   \   0000001C   1000FEFF           DC32        0xfffe0010
   \   00000020   0C00FEFF           DC32        0xfffe000c
   \   00000024   0800FEFF           DC32        0xfffe0008
    130          }
    131          
    132          /*--------------------------------*/
    133          /* Transmit a byte to MMC via SPI */
    134          /* (Platform dependent)           */
    135          
    136          static
    137          void xmit_spi(BYTE dat)
    138          {
    139          	AT91_spi(dat);
    140          }
    141          
    142          /*---------------------------------*/
    143          /* Receive a byte from MMC via SPI */
    144          /* (Platform dependent)            */
    145          
    146          static
    147          BYTE rcvr_spi(void)
    148          {
    149          	return AT91_spi(0xff);
    150          }
    151          
    152          /* Alternative "macro" (not at AT91 so far) to receive data fast */
    153          static

⌨️ 快捷键说明

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