⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 ZLG的EASYARM8962开发板Keil实验例程
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************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>
#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中的数据发送到PC机  */
#define CMD_DATA_RECV	   0x05				                            /*  接收来自串口的数据,并放入
                                                                            sd_buf中                    */

#define UART_O_LCR_H       0x0000002C                                   /*  线控制寄存器,高字节        */
										  
uint8 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 (uint32  BaudRate, uint8  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 (uint8  *Buffer, uint16  NByte)
{
	while (NByte) {                                                     /*  判断是否有数据              */
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -