?? sdspihal.h
字號:
/****************************************Copyright (c)**************************************************
** Guangzhou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: sdspihal.c
** Last modified Date: 2007-07-12
** Last Version: V3.0
** Descriptions: SD/MMC卡讀寫軟件包: 硬件抽象層頭文件 -- SPI模式
**
**
**------------------------------------------------------------------------------------------------------
** Created by: Ming Yuan Zheng
** Created date: 2005-1-6
** Version: V1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: Ming Yuan Zheng
** Modified date: 2007-07-08
** Version: V3.0
** Descriptions: 1. 將SPI_Clk400k()和SPI_ClkToMax()兩函數合并為一個函數SdSpiHal_SetMCIClock()
** 2. 多數函數名以 SdSpiHal_ 作為開頭
** 3. 增加對多卡的支持
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#ifndef __SDSPIHAL_H__
#define __SDSPIHAL_H__
/*
****************************
SPI 總線模式
****************************
*/
#if (!SDBUS_MODE_EN)
/***********************************************************
LPC2364/6 沒有MCI控制器, 所以沒辦法以SD模式讀寫SD/MMC卡, 但可以以SPI
模式讀寫SD/MMC卡. 使用的引腳如下:
LPC2364/6 卡座引腳 SmartARM2300開發板JP1
P0.15(SCK0) -----> CLK/SCK CLK
P0.17(MISO0) -----> DAT0/DO D0
P0.18(MOSI0) -----> CMD/DI CMD
P2.13(用作GPIO) --> DAT3/CS D3
P0.21 -----> (控制卡供電) PWR
P2.8 -----> CARD_INSERT CD
P3.25 -----> CARD_WP WP
如使用SmartARM2300, 硬件連接如下;
1. 用線連接: P0.15 --> CLK(JP1), P0.17 --> D0(JP1), P0.18 --> CMD(JP1)
2. 短接跳線: D3(JP1), PWR(JP1), WP(JP1), CD(JP1)
************************************************************/
/*************************************
LPC2364/6 硬件配置(使用SPI總線)
**************************************/
/* SCK引腳 */
#define SPI_SCK (0x01 << 15) // P0.15
#define SPI_SCK_GPIO() PINSEL0 &= ~(0x03U << 30) /* 設置 SCK 口為GPIO口 */
#define SPI_SCK_OUT() IO0DIR |= SPI_SCK /* 設置 SCK 口為輸出口 */
#define SPI_SCK_CLR() IO0CLR = SPI_SCK /* 置 SCK 為低電平 */
/* MISO 引腳 */
#define SPI_MISO (0x01 << 17) // P0.17
#define SPI_MISO_GPIO() PINSEL1 &= ~(0x03 << 2) /* 設置 MISO 口為GPIO口 */
#define SPI_MISO_OUT() IO0DIR |= SPI_MISO /* 設置 MISO 口為輸出口 */
#define SPI_MISO_CLR() IO0CLR = SPI_MISO /* 置 MISO 為低電平 */
/* MOSI 引腳 */
#define SPI_MOSI (0x01 << 18) // P0.18
#define SPI_MOSI_GPIO() PINSEL1 &= ~(0x03 << 4) /* 設置 MOSI 口為GPIO口 */
#define SPI_MOSI_OUT() IO0DIR |= SPI_MOSI /* 設置 MOSI 口為輸出口 */
#define SPI_MOSI_CLR() IO0CLR = SPI_MOSI /* 置 MISO 為低電平 */
/* P2.13 為 CS 引腳 */
#define SPI_CS_GPIO() PINSEL4 &= ~(0x03 << 26);
#define SPI_CS_OUT() FIO2DIR |= (0x01 << 13); /* 設置 CS 口為輸出口 */
#define SPI_CS_SET() FIO2SET |= (0x01 << 13); /* 置 CS 為高電平 */
#define SPI_CS_CLR() FIO2CLR |= (0x01 << 13); /* 置 CS 為低電平 */
/* 初始化 IO 口為SPI接口 */
#define SPI_INIT() {PINSEL0 &= ~(0x03U << 30); PINSEL1 &= ~((0x03 << 2) + (0x03 << 4));\
PINSEL0 |= (0x03U << 30); PINSEL1 |= (0x03 << 2) + (0x03 << 4);}
/* P0.21 電源控制引腳 */
#define SD_POWER (0x01 << 21)
#define SD_POWER_GPIO() PINSEL1 &= ~(0x03 << 10) /* 設置 POWER 口為GPIO口 */
#define SD_POWER_OUT() IO0DIR |= SD_POWER /* 設置 POWER 口為輸出口 */
#define SD_POWER_OFF() IO0SET |= SD_POWER /* 置 POWER 為高電平 */
#define SD_POWER_ON() IO0CLR |= SD_POWER /* 置 POWER 為低電平 */
/* P2.8 卡完全插入卡座檢測引腳 */
#define SD_INSERT (0x01 << 8)
#define SD_INSERT_GPIO() PINSEL4 &= ~(0x03 << 16) /* 設置 INSERT 口為GPIO口 */
#define SD_INSERT_IN() FIO2DIR &= ~SD_INSERT /* 設置 INSERT 口為輸入口 */
#define SD_INSERT_STATUS() (FIO2PIN & SD_INSERT) /* 讀取 INSERT 口的狀態 */
/* P3.25 卡寫保護檢測引腳 */
#define SD_WP (0x01 << 25)
#define SD_WP_GPIO() PINSEL7 &= ~(0x03 << 18); /* 設置 WP 口為GPIO口 */
#define SD_WP_IN() FIO3DIR &= ~SD_WP /* 設置 WP 口為輸入口 */
#define SD_WP_STATUS() (FIO3DIR & SD_WP) /* 讀取 WP 口的狀態 */
// 檢測卡是否完全插入
extern INT8U SdHal_CheckCard(sd_struct *sds);
// 檢測卡是否寫保護
extern INT8U SdHal_CheckCardWP(sd_struct *sds);
// 初始化訪問卡的硬件初始化
extern INT8U SdSpiHal_Initialize(sd_struct *sds);
// 設置讀寫SD/MMC卡時鐘
extern void SdSpiHal_SetMCIClock(sd_struct *sds, INT32U ClockRate);
// 通過SPI控制器發送一個字節到卡
extern void SdSpiHal_SendByte(sd_struct *sds, INT8U byte);
// 通過SPI控制器從卡接收一個字節
extern INT8U SdSpiHal_RecByte(sd_struct *sds);
// 通過SPI的CS引腳選擇卡
extern void SdSpiHal_CSAssert(sd_struct *sds);
// 通過SPI的CS引腳不選擇卡
extern void SdSpiHal_CSDeassert(sd_struct *sds);
#endif
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -