📄 sd_driver.c
字号:
#include "sd_driver.h"
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(0xFF)
),
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_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(0x3)
),
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
)
};
/*******************************************************************************************************************
** 函数名称: UINT8 SPI_TransferByte(UINT8 value) Name: UINT8 SPI_TransferByte(UINT8 value)
** 功能描述: 串行传输数据块 Function: transfer data in serial
** 输 入: UINT8 value:数据值 Input: UINT8 value:Data Value
** 输 出: 接收数据 Output: Receive Value
********************************************************************************************************************/
UINT8 SPI_TransferByte(UINT8 value) //数据传入后等待返回的数据
{
UINT32 incoming;
while (!MCBSP_xrdy(myMcbsp));
MCBSP_write(myMcbsp,value);
while(!MCBSP_rrdy(myMcbsp));
incoming = MCBSP_read(myMcbsp); //得到数据
return(incoming);
}
/*******************************************************************************************************************
** 函数名称: Bool rcvr_datablock(UINT8* buff, UINT32 btr) Name: Bool rcvr_datablock(UINT8* buff, UINT32 btr)
** 功能描述: 传输数据块 Function: Receive Block of Data
** 输 入: UINT8* buff:缓存区 Input: UINT8* buff:Buffer
UINT8 btr:反馈 UINT8 btr: Response
** 输 出: 1成功 0失败 Output: 1 Success 0: Fail
********************************************************************************************************************/
Bool rcvr_datablock(UINT8* buff, UINT32 btr)
{
UINT8 token;
UINT32 token_wait = 10000;
do{
token = SPI_TransferByte(0xff);
}while((token !=0xFE)&&token_wait--);
if(!token_wait)
{
printf("Error: receive error \n");
return FALSE;
}
do{
*buff++=SPI_TransferByte(0xff);
}while(--btr);
SPI_TransferByte(0xff); //Discard CRC
SPI_TransferByte(0xff); //
return TRUE;
}
/*******************************************************************************************************************
** 函数名称: Bool xmit_datablock(UINT8* buff,UINT8 token) Name: Bool xmit_datablock(UINT8* buff,UINT8 token)
** 功能描述: 传输数据块 Function: Transfer Block of Data
** 输 入: UINT8* buff:缓存区 Input: UINT8* buff:Buffer
UINT8 token:数据块头 UINT8 token: Token
** 输 出: 1成功 0失败 Output: 1 Success 0: Fail
********************************************************************************************************************/
Bool xmit_datablock(UINT8* buff,UINT8 token)
{
UINT8 resp;
UINT16 wc;
UINT32 resp_wait=1000000;
wc = 512;
SPI_TransferByte(token);
if(token!=0xFD)
{
do{
SPI_TransferByte(*buff++);
}while(--wc);
SPI_TransferByte(0xff);//CRC
SPI_TransferByte(0xff);
do{
resp = SPI_TransferByte(0xff);
}while((--resp_wait)&&((resp&0x1F)!=0x05));
if(!resp_wait)
return FALSE;
}
else
{
SPI_TransferByte(0xff);
SPI_TransferByte(0xff);
}
return TRUE;
}
/*******************************************************************************************************************
** 函数名称: void SPI_ClkToMax() Name: void SPI_ClkToMax()
** 功能描述: 设置SPI的clock到最大值 Function: set the clock of SPI to maximum
** 输 入: 无 Input: NULL
** 输 出: 无 Output: NULL
********************************************************************************************************************/
void SPI_ClkToMax(void)
{
MCBSP_config(myMcbsp , &myNormalConfig );
/* Now that the port is setup, let's enable it in steps. */
MCBSP_enableSrgr(myMcbsp);
printf("wait for two clock \n");
MCBSP_enableRcv(myMcbsp);
MCBSP_enableXmt(myMcbsp);
}
/*******************************************************************************************************************
** 函数名称: void MyMcbsp_Init() Name: void MyMcbsp_Init()
** 功能描述: 设置MCBSP接口 Function: set the MCBSP Interface
** 输 入: 无 Input: NULL
** 输 出: 无 Output: NULL
********************************************************************************************************************/
void MyMcbsp_Init()
{
myMcbsp = MCBSP_open(MCBSP_DEV0, MCBSP_OPEN_RESET);
MCBSP_config(myMcbsp , &myInitialConfig );
/* Now that the port is setup, let's enable it in steps. */
MCBSP_enableSrgr(myMcbsp);
printf("wait for two clock \n");
MCBSP_enableRcv(myMcbsp);
MCBSP_enableXmt(myMcbsp);
}
void MyMcbsp_Close()
{
MCBSP_close(myMcbsp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -