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

📄 mc_i.h

📁 MMI层OBJ不能完全编译
💻 H
📖 第 1 页 / 共 2 页
字号:
/**
 * @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 + -