📄 iar-
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name: Main.c
** Last modified Date: 2007.10.20
** Last Version: v1.0
** Description: SD卡读卡器实验
**
**--------------------------------------------------------------------------------------------------------
** Created By: zhou hai xin
** Created date: 2007.10.20
** Version: v1.0
** Descriptions: 初始版本
**
**--------------------------------------------------------------------------------------------------------
** Modified by: Kang qinhua
** Modified date: 2007.11.21
** Version: v1.1
** Description: 对sdhal.c中的SPI的频率设定做了修改
** 原来采用寄存器修改分频值(主频修改后可能导致SPI不可用)
** 现在采用库函数配置SPI速率(可适用于不同的系统时钟下)
** 在sd_SPI.h中修改SD卡的工作波特率
**
*********************************************************************************************************/
#include <includes.h>
/*********************************************************************************************************
CONSTANTS 常量
*********************************************************************************************************/
#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 UART_O_LCR_H 0x0000002C /* 线控制寄存器,高字节 */
INT8U sd_buf[520]; /* 数据缓冲区 */
/*********************************************************************************************************
VARIABLES 变量
*********************************************************************************************************/
static OS_STK Task_CardStk[TASK_CARD_STK_SIZE]; /* 卡操作任务堆栈 */
OS_EVENT *Uart0ReviceMbox; /* 串口接收数据邮箱 */
/*********************************************************************************************************
FUNCTION PROTOTYPES 函数声明
*********************************************************************************************************/
static void Task_Card(void *p_arg); /* 声明卡操作任务 */
/*********************************************************************************************************
** Function name: SSIInit
** Descriptions: 初始化SSI
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void SSIInit (void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI); /* 使能SSI */
SSIConfig(SSI_BASE,SSI_FRF_MOTO_MODE_0, /* 配置SSI */
SSI_MODE_MASTER,BitRate,DataWidth);
SSIEnable(SSI_BASE); /* 使能SSI */
/* 配置GPIO口 */
GPIODirModeSet(GPIO_PORTA_BASE,
(GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5),
GPIO_DIR_MODE_HW);
}
/*********************************************************************************************************
** Function name: GPIO_SET
** Descriptions: 对各个GPIO口进行配置驱动强度和结构类型。
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void GPIO_SET (void)
{
GPIOPadConfigSet(GPIO_PORTA_BASE, SPI_SCK, /* 设置SPI_SCK的驱动强度和类型 */
GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */
GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */
GPIOPadConfigSet(GPIO_PORTA_BASE, SPI_MISO, /* 设置SPI_MISO的驱动强度和类型*/
GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */
GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */
GPIOPadConfigSet(GPIO_PORTA_BASE, SPI_MOSI, /* 设置SPI_MOSI的驱动强度和类型*/
GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */
GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */
GPIOPadConfigSet(GPIO_PORTA_BASE, SPI_CS, /* 设置SPI_CS的驱动强度和类型 */
GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */
GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */
GPIOPadConfigSet(GPIO_PORTG_BASE, SD_POWER, /* 设置SD_POWER的驱动强度和类型*/
GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */
GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */
GPIOPadConfigSet(GPIO_PORTG_BASE, SD_INSERT, /* 设置SD_INSERT驱动强度和类型 */
GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */
GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */
GPIOPadConfigSet(GPIO_PORTE_BASE, SD_WP, /* 设置SD_WP的驱动强度和类型 */
GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */
GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */
}
/*********************************************************************************************************
** Function name: uart0init
** Descriptions: 串口的初始化。
** input parameters: BaudRate :波特率
** Prio :中断优先级
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0init (INT32U BaudRate, INT8U Prio)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); /* 使能串口0外围设备 */
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); /* 设置PA0,PA1为RXD0,TXD0 */
UARTConfigSet(UART0_BASE, BaudRate, (UART_CONFIG_WLEN_8 | /* 数据宽度为8位 */
UART_CONFIG_STOP_ONE | /* 一个停止位 */
UART_CONFIG_PAR_NONE)); /* 无奇偶校验位 */
IntEnable(INT_UART0); /* 使能串口0系统中断 */
UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); /* 使能串口0接收和接收超时中断 */
IntPrioritySet(INT_UART0, Prio); /* 设置中断优先级 */
UARTEnable(UART0_BASE); /* 使能串口 */
}
/*********************************************************************************************************
** Function name: uart0send
** Descriptions: 发送多个字节数据。
** input parameters: Buffer : 发送数据存储位置
** NByte : 发送数据个数
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0send (INT8U *Buffer, INT16U NByte)
{
while (NByte) { /* 判断是否有数据 */
if (UARTSpaceAvail(UART0_BASE)) { /* 判断FIFO是否有可用空间 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -