📄 main_save.c
字号:
/*
* Copyright 2003 by Texas Instruments Incorporated.
* All rights reserved. Property of Texas Instruments Incorporated.
* Restricted rights to use, duplicate or disclose this code are
* granted through contract.
*
*/
/* "@(#) DSP/BIOS 4.90.270 06-11-03 (barracuda-m10)" */
/*
* Copyright 2001 by Texas Instruments Incorporated.
* All rights reserved. Property of Texas Instruments Incorporated.
* Restricted rights to use, duplicate or disclose this code are
* granted through contract.
* U.S. Patent Nos. 5,283,900 5,392,448
*/
/* "@(#) DSP/BIOS 4.51.0 05-23-01 (barracuda-i10)" */
/******************************************************************************\
* Copyright (C) 2000 Texas Instruments Incorporated.
* All Rights Reserved
*------------------------------------------------------------------------------
* FILENAME...... main.c
* DATE CREATED.. 01/11/2000
* LAST MODIFIED. 09/27/2000
\******************************************************************************/
#include <std.h>
#include <log.h>
#include <swi.h>
#include <csl.h>
#include <csl_mcbsp.h>
#include <csl_timer.h>
#define INIT_CMD0_ERROR 0xFF
#define INIT_CMD1_ERROR 0xFE
#define WRITE_BLOCK_ERROR 0xFD
#define READ_BLOCK_ERROR 0xFC
#define MMC_RESET 0x40 + 0
#define MMC_INIT 0x40 + 1
#define SD_CMD8 0x40 + 8
#define MMC_READ_CSD 0x40 + 9
#define MMC_READ_CID 0x40 + 10
#define MMC_STOP_TRANSMISSION 0x40 + 12
#define MMC_SEND_STATUS 0x40 + 13
#define MMC_SET_BLOCKLEN 0x40 + 16
#define MMC_READ_BLOCK 0x40 + 17
#define MMC_READ_MULTI_BLOCK 0x40 + 18
#define MMC_WRITE_BLOCK 0x40 + 24
#define MMC_WRITE_MULTI_BLOCK 0x40 + 25
#define MMC_ERASE_WR_BLK_START_ADDR 0x40 + 32
#define MMC_ERASE_WR_BLK_END_ADDR 0x40 + 33
#define MMC_ERASE 0x40 + 38
#define MMC_APP_CMD (0x40 + 55)
#define MMC_READ_OCR 0x40 + 58
#define MMC_CRC_ON_OFF 0x40 + 59
#define MMC_ACMD_SEND_OPC 0x40 + 41
#define MMC_ACMD44 0x40 + 44
#define BYTE_PER_SEC 512
#define CMD0 0x40
#define CMD1 (0x40 + 1)
#define CMD8 (0x40 + 8)
#define CMD16 (0x40 + 16)
#define CMD55 (0x40 + 55)
#define CMD58 (0x40 + 58)
#define ACMD41 (0xC0 + 41)
/* SD卡信息结构体定义 */
/* the information structure variable of SD Card*/
typedef struct SD_STRUCT
{
unsigned char card_type;
unsigned char card_status;
unsigned char block_num; /* 卡中块的数量 */
unsigned char block_len; /* 卡的块长度(单位:字节) */
unsigned char erase_unit; /* 一次可擦除的块个数 */
unsigned char timeout_read; /* 读块超时时间(单位: 8 SPI clock) */
unsigned char timeout_write; /* 写块超时时间(单位: 8 SPI clock) */
unsigned char timeout_erase; /* 擦块超时时间(单位: 8 SPI clock) */
}sd_struct;
sd_struct sds;
unsigned char buff_w[512];
unsigned char buff_r[512];
unsigned int Timer1;
unsigned char registerbuff_r[512];
TIMER_Handle htimer1;
unsigned int start, end, overhead;
unsigned int writetime, readtime;
unsigned int transfertime1, transfertime2,transfertime3, transfertime4;
unsigned int testcount1, testcount2,testcount3;
unsigned char temp1[128];
unsigned char temp2[128];
/*----------------------------------------------------------------------------*/
extern far LOG_Obj LogMain;
extern far SWI_Obj SwiMain;
MCBSP_Handle myMcbsp;
/*----------------------------------------------------------------------------*/
static MCBSP_Config myInitialConfig = {
MCBSP_SPCR_RMK(
MCBSP_SPCR_FREE_DEFAULT ,
MCBSP_SPCR_SOFT_DEFAULT,
MCBSP_SPCR_FRST_DEFAULT,
MCBSP_SPCR_GRST_DEFAULT,
MCBSP_SPCR_XINTM_DEFAULT,
MCBSP_SPCR_XSYNCERR_DEFAULT,
MCBSP_SPCR_XRST_DEFAULT,
MCBSP_SPCR_DLB_DEFAULT,
MCBSP_SPCR_RJUST_DEFAULT,
MCBSP_SPCR_CLKSTP_NODELAY,
MCBSP_SPCR_DXENA_DEFAULT,
MCBSP_SPCR_RINTM_RRDY,
MCBSP_SPCR_RSYNCERR_DEFAULT,
MCBSP_SPCR_RRST_DEFAULT
),
MCBSP_RCR_RMK(
MCBSP_RCR_RPHASE_SINGLE,
MCBSP_RCR_RFRLEN2_DEFAULT,
MCBSP_RCR_RWDLEN2_DEFAULT,
MCBSP_RCR_RCOMPAND_DEFAULT,
MCBSP_RCR_RFIG_NO,
MCBSP_RCR_RDATDLY_1BIT,
MCBSP_RCR_RFRLEN1_DEFAULT,
MCBSP_RCR_RWDLEN1_8BIT,
MCBSP_RCR_RWDREVRS_DISABLE
),
MCBSP_XCR_RMK(
MCBSP_XCR_XPHASE_SINGLE,
MCBSP_XCR_XFRLEN2_DEFAULT,
MCBSP_XCR_XWDLEN2_DEFAULT,
MCBSP_XCR_XCOMPAND_DEFAULT,
MCBSP_XCR_XFIG_NO,
MCBSP_XCR_XDATDLY_1BIT,
MCBSP_XCR_XFRLEN1_DEFAULT,
MCBSP_XCR_XWDLEN1_8BIT,
MCBSP_XCR_XWDREVRS_DISABLE
),
MCBSP_SRGR_RMK(
MCBSP_SRGR_GSYNC_FREE,
MCBSP_SRGR_CLKSP_RISING,
MCBSP_SRGR_CLKSM_INTERNAL,
MCBSP_SRGR_FSGM_DXR2XSR,
MCBSP_SRGR_FPER_DEFAULT,
MCBSP_SRGR_FWID_DEFAULT,
MCBSP_SRGR_CLKGDV_OF(4)
),
MCBSP_MCR_DEFAULT,
MCBSP_RCERE0_DEFAULT,
MCBSP_RCERE1_DEFAULT,
MCBSP_RCERE2_DEFAULT,
MCBSP_RCERE3_DEFAULT,
MCBSP_XCERE0_DEFAULT,
MCBSP_XCERE1_DEFAULT,
MCBSP_XCERE2_DEFAULT,
MCBSP_XCERE3_DEFAULT,
MCBSP_PCR_RMK(
MCBSP_PCR_XIOEN_SP,
MCBSP_PCR_RIOEN_SP,
MCBSP_PCR_FSXM_INTERNAL,
MCBSP_PCR_FSRM_EXTERNAL,
MCBSP_PCR_CLKXM_OUTPUT,
MCBSP_PCR_CLKRM_INPUT,
MCBSP_PCR_CLKSSTAT_0,
MCBSP_PCR_DXSTAT_0,
MCBSP_PCR_FSXP_ACTIVELOW,
MCBSP_PCR_FSRP_ACTIVELOW,
MCBSP_PCR_CLKXP_FALLING,
MCBSP_PCR_CLKRP_DEFAULT
)
};
static MCBSP_Config myNormalConfig = {
MCBSP_SPCR_RMK(
MCBSP_SPCR_FREE_DEFAULT ,
MCBSP_SPCR_SOFT_DEFAULT,
MCBSP_SPCR_FRST_DEFAULT,
MCBSP_SPCR_GRST_DEFAULT,
MCBSP_SPCR_XINTM_DEFAULT,
MCBSP_SPCR_XSYNCERR_DEFAULT,
MCBSP_SPCR_XRST_DEFAULT,
MCBSP_SPCR_DLB_DEFAULT,
MCBSP_SPCR_RJUST_DEFAULT,
MCBSP_SPCR_CLKSTP_DELAY,
MCBSP_SPCR_DXENA_DEFAULT,
MCBSP_SPCR_RINTM_RRDY,
MCBSP_SPCR_RSYNCERR_DEFAULT,
MCBSP_SPCR_RRST_DEFAULT
),
MCBSP_RCR_RMK(
MCBSP_RCR_RPHASE_SINGLE,
MCBSP_RCR_RFRLEN2_DEFAULT,
MCBSP_RCR_RWDLEN2_DEFAULT,
MCBSP_RCR_RCOMPAND_DEFAULT,
MCBSP_RCR_RFIG_NO,
MCBSP_RCR_RDATDLY_1BIT,
MCBSP_RCR_RFRLEN1_DEFAULT,
MCBSP_RCR_RWDLEN1_8BIT,
MCBSP_RCR_RWDREVRS_DISABLE
),
MCBSP_XCR_RMK(
MCBSP_XCR_XPHASE_SINGLE,
MCBSP_XCR_XFRLEN2_DEFAULT,
MCBSP_XCR_XWDLEN2_DEFAULT,
MCBSP_XCR_XCOMPAND_DEFAULT,
MCBSP_XCR_XFIG_NO,
MCBSP_XCR_XDATDLY_1BIT,
MCBSP_XCR_XFRLEN1_DEFAULT,
MCBSP_XCR_XWDLEN1_8BIT,
MCBSP_XCR_XWDREVRS_DISABLE
),
MCBSP_SRGR_RMK(
MCBSP_SRGR_GSYNC_FREE,
MCBSP_SRGR_CLKSP_RISING,
MCBSP_SRGR_CLKSM_INTERNAL,
MCBSP_SRGR_FSGM_DXR2XSR,
MCBSP_SRGR_FPER_DEFAULT,
MCBSP_SRGR_FWID_DEFAULT,
MCBSP_SRGR_CLKGDV_OF(3)
),
MCBSP_MCR_DEFAULT,
MCBSP_RCERE0_DEFAULT,
MCBSP_RCERE1_DEFAULT,
MCBSP_RCERE2_DEFAULT,
MCBSP_RCERE3_DEFAULT,
MCBSP_XCERE0_DEFAULT,
MCBSP_XCERE1_DEFAULT,
MCBSP_XCERE2_DEFAULT,
MCBSP_XCERE3_DEFAULT,
MCBSP_PCR_RMK(
MCBSP_PCR_XIOEN_SP,
MCBSP_PCR_RIOEN_SP,
MCBSP_PCR_FSXM_INTERNAL,
MCBSP_PCR_FSRM_EXTERNAL,
MCBSP_PCR_CLKXM_OUTPUT,
MCBSP_PCR_CLKRM_INPUT,
MCBSP_PCR_CLKSSTAT_0,
MCBSP_PCR_DXSTAT_0,
MCBSP_PCR_FSXP_ACTIVELOW,
MCBSP_PCR_FSRP_ACTIVELOW,
MCBSP_PCR_CLKXP_RISING,
MCBSP_PCR_CLKRP_DEFAULT
)
};
unsigned char SPI_TransferByte(unsigned char value) //数据传入后等待返回的数据
{
unsigned int incoming=0;
while (!MCBSP_xrdy(myMcbsp));
MCBSP_write(myMcbsp,value);
while(!MCBSP_rrdy(myMcbsp));
incoming = MCBSP_read(myMcbsp); //得到数据
return(incoming);
}
unsigned char SPI_REV() //数据传入后等待返回的数据
{
unsigned int incoming=0;
while(!MCBSP_rrdy(myMcbsp));
incoming = MCBSP_read(myMcbsp); //得到数据
return(incoming);
}
unsigned char Write_Command_MMC(unsigned char cmd, unsigned int address)
{
unsigned int retry=10;
unsigned char tmp;
unsigned char crcc = 0xFF;
if(cmd&0x80)
{
cmd &=0x7F;
tmp = Write_Command_MMC(CMD55,0);
if(tmp>1)
return tmp;
}
tmp = SPI_TransferByte(cmd);
tmp = SPI_TransferByte(address>>24);
tmp = SPI_TransferByte(address>>16);
tmp = SPI_TransferByte(address>>8);
tmp = SPI_TransferByte(address);
if(cmd == CMD0) crcc = 0x95;
if(cmd == CMD8) crcc = 0x87;
tmp = SPI_TransferByte(crcc); //不用crc验证
do{
tmp = SPI_TransferByte(0xFF);
}while((tmp&0x80)&&retry--); // 等待返回或者计时时间到达
return(tmp);
}
unsigned char* Write_CMD8()
{
unsigned char temp[20];
temp[0] = SPI_TransferByte(SD_CMD8);
temp[1] = SPI_TransferByte(0x00); //39:32 reserve;
temp[2] = SPI_TransferByte(0x00); //31:24 reserve;
temp[3] = SPI_TransferByte(0x01); //23:20 reserve; 19:16 VHS
temp[4] = SPI_TransferByte(0x66); //check pattern
temp[5] = SPI_TransferByte(0x87); //CRC
temp[6] = SPI_TransferByte(0xff);
temp[7] = SPI_TransferByte(0xff);
temp[8] = SPI_TransferByte(0xff);
temp[9] = SPI_TransferByte(0xff);
temp[10] = SPI_TransferByte(0xff);
temp[11] = SPI_TransferByte(0xff);
temp[12] = SPI_TransferByte(0xff);
return temp;
}
unsigned char* Write_CMD55()
{
unsigned char temp[20];
unsigned char temp1;
int i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -