📄 mc_i.h
字号:
/**
* @file mc_i.h
*
* Internal definitions for MC.
*
* @author (P.Klok)
* @version 0.1
*/
/*
* History:
*
* Date Author Modification
* -------------------------------------------------------------------
* 7/1/2003 () Create.
*
* (C) Copyright 2003 by ICT Embedded B.V., All Rights Reserved
*/
#ifndef __MC_INST_I_H_
#define __MC_INST_I_H_
#include "rv/rv_general.h"
#include "rvf/rvf_api.h"
#include "rvm/rvm_gen.h"
#include "rvm/rvm_use_id_list.h"
#include "rvm/rvm_ext_use_id_list.h"
#ifndef _WINDOWS
#include "nucleus.h"
#include "inth/sys_inth.h"
#if 1 // Added for MMC compilation in Locosto
#define MEM_MMC_SD_IO 0xFFFFC800L
#define C_DMA_CHANNEL_MMC_SD_RX 16
#define C_DMA_CHANNEL_MMC_SD_TX 17
#endif // #if 1 // Added for MMC compilation in Locosto
#define MEM_MC_SD_IO MEM_MMC_SD_IO
#endif
#include "mc/mc_cfg.h"
#include "mc/mc_api.h"
#include "mc/mc_message.h"
#include "mc/mc_state_i.h"
//#include "mc_state_i.h"
#include "dmg/dmg_api.h"
#include "dmg/dmg_message.h"
extern void mc_send_trace_priv(char * string, UINT8 msg_length, UINT32 val, UINT8 trace_level, UINT32 swe_use_id);
/** Macro used for tracing MC messages. */
#ifdef MC_ENABLE_TRACE
#ifndef _WINDOWS
#define MC_SEND_TRACE(string, trace_level) \
//mc_send_trace_priv (string, (sizeof(string) - 1), NULL_PARAM, trace_level, MC_USE_ID)
rvf_send_trace (string, (sizeof(string) - 1), NULL_PARAM, trace_level, MC_USE_ID)
#define MC_SEND_TRACE_PARAM(string, param, trace_level) \
mc_send_trace_priv (string, (sizeof(string) - 1), param, trace_level, MC_USE_ID)
#else
#define MC_SEND_TRACE(string, trace_level) \
rvf_send_trace (string, (sizeof(string) - 1), NULL_PARAM, trace_level, MC_USE_ID)
#define MC_SEND_TRACE_PARAM(string, param, trace_level) \
rvf_send_trace (string, (sizeof(string) - 1), param, trace_level, MC_USE_ID)
#endif
#else
/** Used Callback function*/
extern void mc_return_queue_init (T_RVF_G_ADDR_ID rq_addr_id, UINT16 rq_event,
T_RV_RETURN_PATH * path_to_mc_return_queue_p);
#define MC_SEND_TRACE(string, trace_level) /* Nothing */
#define MC_SEND_TRACE_PARAM(string, param, trace_level) /* Nothing */
#endif
/** Marco for freeing messages */
#define MC_FREE_MSG(msg_p) {if(msg_p) rvf_free_msg((T_RVF_MSG *) msg_p);(msg_p)=NULL;}
/** Marco for freeing memory */
#define MC_FREE_BUF(buf_p) {if(buf_p) rvf_free_buf((T_RVF_BUFFER *) buf_p);(buf_p)=NULL;}
/** Marco for reading **/
#define MC_REG(A) (*(volatile UINT16*)(A))
/* Maximum supported cards (for now, just one supported) */
#define MC_MAX_STACK_SIZE (1)
/* Hardware specific definitions */
/* Maximum FIFO size in bytes */
#define MAX_FIFO_SIZE (64)
/* Maximum subscribers */
#define MC_MAX_SUBSCRIBER (10)
/** CSD register size (in bytes) */
#define MC_CSD_SIZE (16)
#define SD_CMD_SIZE (6)
#define SD_DATA_SIZE (512) //Added for SD card data block size
/** CSD register size (in bytes) */
#define MC_CSR_SIZE (8)
/** General MC timeout */
#define MC_TIME_OUT (RVF_MS_TO_TICKS(4500))
/** defines the MCLK frequency (is 13 MHZ)*/
//#define MC_MCLK 13000000
/** Clock frequencies */
#define MC_CLK_270kHz (0x30) /* Card acquisition */
//#define MC_CLK_1300kHz (10)
//#define MC_CLK_1625kHz (8)
#define MC_CLK_2166kHz (6) /* Safe speed */
//#define MC_CLK_2600kHz (5)
//#define MC_CLK_3250kHz (4) /* Maximum without distortion */
//#define MC_CLK_13000kHz (1) /* Maximum possible clk speed */
/** Identification clock divider(200Khz)(400Khz is MAX):
* 13 Mhz/0x30 */
#define MC_ID_CLK_DIV MC_CLK_270kHz
/** Normal operating speed (1.3Mhz, safe speed for common range of cards)*/
#define MC_NORM_CLK_DIV MC_CLK_2166kHz
//NOT USED IN LOCOSTO
#if 0
/**macro to retreive speedrate*/
#define MC_TRAN_SPEED_RATE_UNIT(tran_speed) (tran_speed & 0x07)
/**values used as speedrate in TRAN_SPEED (CSD)*/
#define MC_TRAN_SPEED_RATE_UNIT_100_K_BIT (0)
#define MC_TRAN_SPEED_RATE_UNIT_1_M_BIT (1)
#define MC_TRAN_SPEED_RATE_UNIT_10_M_BIT (2)
#define MC_TRAN_SPEED_RATE_UNIT_100_M_BIT (3)
/**macro to retreive speedtime*/
#define MC_TRAN_SPEED_TIME_VALUE(tran_speed) ((tran_speed >> 3) & 0x0F)
/**values used as timevalue in TRAN_SPEED (CSD)*/
#define MC_TRAN_SPEED_TIME_VALUE_1_0 (0x01)
#define MC_TRAN_SPEED_TIME_VALUE_1_2 (0x02)
#define MC_TRAN_SPEED_TIME_VALUE_1_3 (0x03)
#define MC_TRAN_SPEED_TIME_VALUE_1_5 (0x04)
#define MC_TRAN_SPEED_TIME_VALUE_2_0 (0x05)
#define MC_TRAN_SPEED_TIME_VALUE_2_5 (0x06)
#define MC_TRAN_SPEED_TIME_VALUE_3_0 (0x07)
#define MC_TRAN_SPEED_TIME_VALUE_3_5 (0x08)
#define MC_TRAN_SPEED_TIME_VALUE_4_0 (0x09)
#define MC_TRAN_SPEED_TIME_VALUE_4_5 (0x0A)
#define MC_TRAN_SPEED_TIME_VALUE_5_0 (0x0B)
#define MC_TRAN_SPEED_TIME_VALUE_5_5 (0x0C)
#define MC_TRAN_SPEED_TIME_VALUE_6_0 (0x0D)
#define MC_TRAN_SPEED_TIME_VALUE_7_0 (0x0E)
#define MC_TRAN_SPEED_TIME_VALUE_8_0 (0x0F)
/**macro to retreive time unit*/
#define MC_TAAC_TIME_UNIT(taac) (taac & 0x07)
/**values used as taac in TRAN_SPEED (CSD)*/
#define MC_TAAC_TIME_UNIT_1_N_S (0)
#define MC_TAAC_TIME_UNIT_10_N_S (1)
#define MC_TAAC_TIME_UNIT_100_N_S (2)
#define MC_TAAC_TIME_UNIT_1_U_S (3)
#define MC_TAAC_TIME_UNIT_10_U_S (3)
#define MC_TAAC_TIME_UNIT_100_U_S (3)
#define MC_TAAC_TIME_UNIT_1_M_S (3)
#define MC_TAAC_TIME_UNIT_10_M_S (3)
/**macro to retreive speedtime*/
#define MC_TAAC_TIME_VALUE(tran_speed) ((tran_speed >> 3) & 0x0F)
/**values used as timevalue in TRAN_SPEED (CSD)*/
#define MC_TAAC_TIME_VALUE_1_0 (0x01)
#define MC_TAAC_TIME_VALUE_1_2 (0x02)
#define MC_TAAC_TIME_VALUE_1_3 (0x03)
#define MC_TAAC_TIME_VALUE_1_5 (0x04)
#define MC_TAAC_TIME_VALUE_2_0 (0x05)
#define MC_TAAC_TIME_VALUE_2_5 (0x06)
#define MC_TAAC_TIME_VALUE_3_0 (0x07)
#define MC_TAAC_TIME_VALUE_3_5 (0x08)
#define MC_TAAC_TIME_VALUE_4_0 (0x09)
#define MC_TAAC_TIME_VALUE_4_5 (0x0A)
#define MC_TAAC_TIME_VALUE_5_0 (0x0B)
#define MC_TAAC_TIME_VALUE_5_5 (0x0C)
#define MC_TAAC_TIME_VALUE_6_0 (0x0D)
#define MC_TAAC_TIME_VALUE_7_0 (0x0E)
#define MC_TAAC_TIME_VALUE_8_0 (0x0F)
#endif
#ifndef _WINDOWS
/* Size of the HISR stack associated to the MC interrupt */
#ifndef HISR_STACK_SHARING
#define MC_HISR_STACK_SIZE (512)
#endif
#endif
/*NOT REQUIRED IN LOCOSTO*/
/** Register offsets **/
//#define MC_CMD MC_REG(MEM_MC_SD_IO + 0x00)
//#define MC_ARGL MC_REG(MEM_MC_SD_IO + 0x02)
//#define MC_ARGH MC_REG(MEM_MC_SD_IO + 0x04)
//#define MC_CON MC_REG(MEM_MC_SD_IO + 0x06)
#define MC_STAT MC_REG(MEM_MC_SD_IO + 0x08)
#define MC_IE MC_REG(MEM_MC_SD_IO + 0x0A)
#define MC_CTO MC_REG(MEM_MC_SD_IO + 0x0C)
#define MC_DTO MC_REG(MEM_MC_SD_IO + 0x0E)
#define MC_DATA MC_REG(MEM_MC_SD_IO + 0x10)
#define MC_BLEN MC_REG(MEM_MC_SD_IO + 0x12)
#define MC_NBLK MC_REG(MEM_MC_SD_IO + 0x14)
#define MC_BUF MC_REG(MEM_MC_SD_IO + 0x16)
#define MC_SPI MC_REG(MEM_MC_SD_IO + 0x18)
#define MC_SDIO MC_REG(MEM_MC_SD_IO + 0x1A)
#define MC_SYST MC_REG(MEM_MC_SD_IO + 0x1C)
#define MC_REV MC_REG(MEM_MC_SD_IO + 0x1E)
#define MC_RSP0 MC_REG(MEM_MC_SD_IO + 0x20)
#define MC_RSP1 MC_REG(MEM_MC_SD_IO + 0x22)
#define MC_RSP2 MC_REG(MEM_MC_SD_IO + 0x24)
#define MC_RSP3 MC_REG(MEM_MC_SD_IO + 0x26)
#define MC_RSP4 MC_REG(MEM_MC_SD_IO + 0x28)
#define MC_RSP5 MC_REG(MEM_MC_SD_IO + 0x2A)
#define MC_RSP6 MC_REG(MEM_MC_SD_IO + 0x2C)
#define MC_RSP7 MC_REG(MEM_MC_SD_IO + 0x2E)
#define MC_IOSR MC_REG(MEM_MC_SD_IO + 0x30)
#define MC_SYSC MC_REG(MEM_MC_SD_IO + 0x32)
#define MC_SYSS MC_REG(MEM_MC_SD_IO + 0x34)
/** GPIO register mappings */
#define MC_GPIO_INPUT_LATCH MC_REG(C_MAP_GPIO_BASE + 0x00)
#define MC_GPIO_IO_CNTL_REG MC_REG(C_MAP_GPIO_BASE + 0x04)
#define MC_GPIO_IE_LEVEL_REG MC_REG(C_MAP_GPIO_BASE + 0x16)
#define MC_GPIO_IE_MASK_REG MC_REG(C_MAP_GPIO_BASE + 0x18)
#define MC_GPIO_IE_STATUS_REG MC_REG(C_MAP_GPIO_BASE + 0x1E)
#define MC_GPIO_IE_SOFTCLEAR MC_REG(C_MAP_GPIO_BASE + 0x22)
/** PHYSICAL USED GPIO PINS */
#define MC_GPIO_10 0x0000400
#define MC_GPIO_13 0x0002000
#ifndef _WINDOWS
#define MC_WRITE_PROTECTED ((MC_GPIO_INPUT_LATCH & MC_GPIO_10) == MC_GPIO_10 ? 1:0)
#define MC_CARD_INSERTED ((MC_GPIO_INPUT_LATCH & MC_GPIO_13) == MC_GPIO_13 ? 0:1)
#else
#define MC_WRITE_PROTECTED (1)
#define MC_CARD_INSERTED (1)
#endif /**_WINDOWS*/
/** Class 0: basic commands **/
#define GO_IDLE_STATE 0 /*SUPPORTED IN SPI MODE*/
#define SEND_OP_COND 1 /*SUPPORTED IN SPI MODE*/
//#define ALL_SEND_CID 2 /* NOT SUPPORTED IN SPI MODE */
//#define SET_RELATIVE_ADDR 3 /* NOT SUPPORTED IN SPI MODE */
//#define SET_DSR 4 /* NOT SUPPORTED IN SPI MODE */
//#define SEL_DESEL_CARD 7 /* NOT SUPPORTED IN SPI MODE */
#define SEND_CSD 9 /*SUPPORTED IN SPI MODE*/
#define SEND_CID 10 /*SUPPORTED IN SPI MODE*/
#define STOP_TRANSMISSION 12 /*SUPPORTED IN SPI MODE*/
#define SEND_STATUS 13 /*SUPPORTED IN SPI MODE*/
#define READ_OCR 58 //added for LOCOSTO CMD58
#define CRC_ON_OFF 59 //added for LOCOSTO CMD59
//#define GO_INACTIVE_STATE 15
/** Class 0: stream read commands **/
#define READ_DAT_UNTIL_STOP 11
/** Class 2: block read commands **/
#define SET_BLOCKLEN 16 /*SUPPORTED IN SPI MODE*/
#define READ_SINGLE_BLOCK 17 /*SUPPORTED IN SPI MODE*/
#define READ_MULTIPLE_BLOCK 18 /*SUPPORTED IN SPI MODE*/
#define SET_BLOCK_COUNT 23
/** Class 3: stream read commands **/
//#define WRITE_DAT_UNTIL_STOP 20 /* NOT SUPPORTED IN SPI MODE */
/** Class 4: block write commands **/
#define WRITE_BLOCK 24 /*SUPPORTED IN SPI MODE*/
#define WRITE_MULTIPLE_BLOCK 25 /*SUPPORTED IN SPI MODE*/
//#define PROGRAM_CID 26 /* NOT SUPPORTED IN SPI MODE */
#define PROGRAM_CSD 27 /*SUPPORTED IN SPI MODE*/
/** Class 5: erase commands **/
#define ERASE_WR_BLK_START 32 /*SUPPORTED IN SPI MODE*/
#define ERASE_WR_BLK_END 33 /*SUPPORTED IN SPI MODE*/
//#define ERASE_GROUP_START 35 /* NOT SUPPORTED IN SPI MODE */
//#define ERASE_GROUP_END 36 /* NOT SUPPORTED IN SPI MODE */
#define ERASE 38 /*SUPPORTED IN SPI MODE*/
/** Class 6: write protection commands **/
#define SET_WRITE_PROT 28 /*SUPPORTED IN SPI MODE*/
#define CLR_WRITE_PROT 29 /*SUPPORTED IN SPI MODE*/
#define SEND_WRITE_PROT 30 /*SUPPORTED IN SPI MODE*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -