main.c
来自「SD卡驱动程序。周立功单片机公司开发板提供的标准例程。」· C语言 代码 · 共 155 行
C
155 行
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: LinEnqiang
** Modified date: 2006-12-1
** Version:
** Descriptions: Test
**
********************************************************************************************************/
#include "config.h"
#include "..\ZLGSD_Dri\SDMCC_PDD\sdconfig.h"
#include "..\uart\uart.h"
#include "string.h"
/*************************************************************************
for SmartARM2300 SD/MMC卡
使用说明:
1. 短接SmartARM2300板上JP1中的 WP, CD, D1, D0, CLK, CMD, D3, D2, PWR
2. 短接JP1中的 TXD0 和 RXD0, 并用串口线连接SmartARM2300和PC机.
3. 运行本工程, 并在PC机上运行SDExample.exe
**************************************************************************/
#define CMD_SD_INIT 0x00 /* 卡初始化卡命令 */
#define CMD_SD_READ 0x01 /* 卡读命令 */
#define CMD_SD_WRITE 0x02 /* 卡写命令 */
#define CMD_SD_ERASE 0x03 /* 卡擦除命令 */
#define CMD_DATA_TRANS 0x04 /* 将sd_buf中的数据发送到PC机 */
#define CMD_DATA_RECV 0x05 /* 接收来自串口的数据,并放入sd_buf中 */
#define SD_INT 24
/*********************************************************************************************************
;** Function name: SetISR
;**
;** Descriptions: Set ISR function for VIC
;**
;** input parameters: no : VIC Channel
;** pri : VIC PRI
;** isr_func : VIC ISR function
;** Returned value: None
----------------------------------------------------------------------------------
;********************************************************************************************************/
uint8 SetISR(uint32 no, uint32 pri, uint32 isr_func)
{
if(no > 31) return 0;
if(pri > 15) return 0;
*(volatile uint32*)((&VICVectAddr0)+no) = isr_func; //设置中断服务函数
*(volatile uint32*)((&VICVectPri0)+no)= pri & 0x0F; //设置中断优先级
VICIntSelect &= ~(1<<no);
VICIntEnable = 1<<no;
return 1;
}
/* SD卡信息结构体变量 */
sd_struct sds;
/* SD/MMC卡读写缓冲区,比SDMMC卡一个块大8字节 */
uint8 sd_buf[520];
uint8 ret;
/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :从串口UART0接收字符串"Hello EasyARM2131!",并发送回上位机显示。
** 调试说明 :需要PC串口显示终端软件如EasyARM.exe。
*********************************************************************************************************
*/
int main (void)
{
uint8 RecBuf[8];
uint32 bufaddr,blockaddr,blocknum;
UART0_Init(); // 串口初始化
SetISR(SD_INT, 2, (uint32)MCI_Handler);
IRQEnable();
for (;;)
{
UART0_GetStr(RecBuf, 8); /* 从串口接收字符串 */
switch(RecBuf[0])
{
case CMD_SD_INIT:
sds.card_posnum = 0;
RecBuf[1] = SD_Initialize(&sds); /* 初始化卡 */
break;
case CMD_SD_READ:
blockaddr = (RecBuf[1] << 24) + (RecBuf[2] << 16) + /* 计算块地址 */
(RecBuf[3] << 8) + RecBuf[4];
RecBuf[1] = SD_ReadBlock(&sds, blockaddr, sd_buf); /* 卡单块读 */
break;
case CMD_SD_WRITE:
blockaddr = (RecBuf[1] << 24) + (RecBuf[2] << 16) +
(RecBuf[3] << 8) + RecBuf[4];
RecBuf[1] = SD_WriteBlock(&sds, blockaddr, sd_buf); /* 卡单块写 */
break;
case CMD_SD_ERASE:
blockaddr = (RecBuf[1] << 24) + (RecBuf[2] << 16) +
(RecBuf[3] << 8) + RecBuf[4]; /* 擦卡起始地址 */
blocknum = (RecBuf[5] << 16) + (RecBuf[6] << 8) +
(RecBuf[7]); /* 块数 */
RecBuf[1] = SD_EraseBlock(&sds, blockaddr, blocknum); /* 擦除操作 */
break;
case CMD_DATA_RECV:
bufaddr = (RecBuf[1] << 8) + RecBuf[2]; /* 计算缓冲区地址 */
memcpy(sd_buf + bufaddr, &RecBuf[3], 5); /* 收到数据放入RecBuf */
break;
case CMD_DATA_TRANS:
bufaddr = (RecBuf[1] << 8) + RecBuf[2]; /* 计算缓冲区地址 */
memcpy(&RecBuf[1], sd_buf + bufaddr, 7); /* sd_buf数据放入RecBuf */
break;
default: break;
}
UART0_SendData(RecBuf, 8); /* 发送响应帧 */
}
//return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?