?? main.c
字號:
/****************************************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的頻率設(shè)定做了修改
** 原來采用寄存器修改分頻值(主頻修改后可能導(dǎo)致SPI不可用)
** 現(xiàn)在采用庫函數(shù)配置SPI速率(可適用于不同的系統(tǒng)時鐘下)
** 在sd_SPI.h中修改SD卡的工作波特率
**
*********************************************************************************************************/
#include <includes.h>
#include "sd_SPI.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中的數(shù)據(jù)發(fā)送到PC機 */
#define CMD_DATA_RECV 0x05 /* 接收來自串口的數(shù)據(jù),并放入
sd_buf中 */
#define UART_O_LCR_H 0x0000002C /* 線控制寄存器,高字節(jié) */
uint8 sd_buf[520]; /* 數(shù)據(jù)緩沖區(qū) */
/*********************************************************************************************************
VARIABLES 變量
*********************************************************************************************************/
static OS_STK Task_CardStk[TASK_CARD_STK_SIZE]; /* 卡操作任務(wù)堆棧 */
OS_EVENT *Uart0ReviceMbox; /* 串口接收數(shù)據(jù)郵箱 */
/*********************************************************************************************************
FUNCTION PROTOTYPES 函數(shù)聲明
*********************************************************************************************************/
static void Task_Card(void *p_arg); /* 聲明卡操作任務(wù) */
/*********************************************************************************************************
** 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口進行配置驅(qū)動強度和結(jié)構(gòu)類型。
** input parameters: 無
** output parameters: 無
** Returned value: 無
*********************************************************************************************************/
void GPIO_SET (void)
{
GPIOPadConfigSet(GPIO_PORTA_BASE, SPI_SCK, /* 設(shè)置SPI_SCK的驅(qū)動強度和類型 */
GPIO_STRENGTH_4MA, /* 4mA的輸出驅(qū)動強度 */
GPIO_PIN_TYPE_STD); /* 設(shè)置為推挽管腳 */
GPIOPadConfigSet(GPIO_PORTA_BASE, SPI_MISO, /* 設(shè)置SPI_MISO的驅(qū)動強度和類型*/
GPIO_STRENGTH_4MA, /* 4mA的輸出驅(qū)動強度 */
GPIO_PIN_TYPE_STD); /* 設(shè)置為推挽管腳 */
GPIOPadConfigSet(GPIO_PORTA_BASE, SPI_MOSI, /* 設(shè)置SPI_MOSI的驅(qū)動強度和類型*/
GPIO_STRENGTH_4MA, /* 4mA的輸出驅(qū)動強度 */
GPIO_PIN_TYPE_STD); /* 設(shè)置為推挽管腳 */
GPIOPadConfigSet(GPIO_PORTA_BASE, SPI_CS, /* 設(shè)置SPI_CS的驅(qū)動強度和類型 */
GPIO_STRENGTH_4MA, /* 4mA的輸出驅(qū)動強度 */
GPIO_PIN_TYPE_STD); /* 設(shè)置為推挽管腳 */
GPIOPadConfigSet(GPIO_PORTG_BASE, SD_POWER, /* 設(shè)置SD_POWER的驅(qū)動強度和類型*/
GPIO_STRENGTH_4MA, /* 4mA的輸出驅(qū)動強度 */
GPIO_PIN_TYPE_STD); /* 設(shè)置為推挽管腳 */
GPIOPadConfigSet(GPIO_PORTG_BASE, SD_INSERT, /* 設(shè)置SD_INSERT驅(qū)動強度和類型 */
GPIO_STRENGTH_4MA, /* 4mA的輸出驅(qū)動強度 */
GPIO_PIN_TYPE_STD); /* 設(shè)置為推挽管腳 */
GPIOPadConfigSet(GPIO_PORTE_BASE, SD_WP, /* 設(shè)置SD_WP的驅(qū)動強度和類型 */
GPIO_STRENGTH_4MA, /* 4mA的輸出驅(qū)動強度 */
GPIO_PIN_TYPE_STD); /* 設(shè)置為推挽管腳 */
}
/*********************************************************************************************************
** Function name: uart0init
** Descriptions: 串口的初始化。
** input parameters: BaudRate :波特率
** Prio :中斷優(yōu)先級
** output parameters: 無
** Returned value: 無
*********************************************************************************************************/
void uart0init (uint32 BaudRate, uint8 Prio)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); /* 使能串口0外圍設(shè)備 */
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); /* 設(shè)置PA0,PA1為RXD0,TXD0 */
UARTConfigSet(UART0_BASE, BaudRate, (UART_CONFIG_WLEN_8 | /* 數(shù)據(jù)寬度為8位 */
UART_CONFIG_STOP_ONE | /* 一個停止位 */
UART_CONFIG_PAR_NONE)); /* 無奇偶校驗位 */
IntEnable(INT_UART0); /* 使能串口0系統(tǒng)中斷 */
UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); /* 使能串口0接收和接收超時中斷 */
IntPrioritySet(INT_UART0, Prio); /* 設(shè)置中斷優(yōu)先級 */
UARTEnable(UART0_BASE); /* 使能串口 */
}
/*********************************************************************************************************
** Function name: uart0send
** Descriptions: 發(fā)送多個字節(jié)數(shù)據(jù)。
** input parameters: Buffer : 發(fā)送數(shù)據(jù)存儲位置
** NByte : 發(fā)送數(shù)據(jù)個數(shù)
** output parameters: 無
** Returned value: 無
*********************************************************************************************************/
void uart0send (uint8 *Buffer, uint16 NByte)
{
while (NByte) { /* 判斷是否有數(shù)據(jù) */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -