📄 sd.h
字号:
_mcu_register_wr(x_sram_data, temp_buf[13]); \
_mcu_register_wr(x_sram_data, temp_buf[14]); \
_mcu_register_wr(x_sram_data, temp_buf[15]); \
_mcu_register_wr(x_sram_data, temp_buf[16]); \
_mcu_register_wr(x_sram_data, temp_buf[17]); \
_mcu_register_wr(x_sram_data, temp_buf[18]); \
_mcu_register_wr(x_sram_data, temp_buf[19]); \
_mcu_register_wr(x_sram_data, temp_buf[20]); \
_mcu_register_wr(x_sram_data, temp_buf[21]); \
_mcu_register_wr(x_sram_data, temp_buf[22]); \
_mcu_register_wr(x_sram_data, temp_buf[23]); \
_mcu_register_wr(x_sram_data, temp_buf[24]); \
_mcu_register_wr(x_sram_data, temp_buf[25]); \
_mcu_register_wr(x_sram_data, temp_buf[26]); \
_mcu_register_wr(x_sram_data, temp_buf[27]); \
_mcu_register_wr(x_sram_data, temp_buf[28]); \
_mcu_register_wr(x_sram_data, temp_buf[29]); \
_mcu_register_wr(x_sram_data, temp_buf[30]); \
_mcu_register_wr(x_sram_data, temp_buf[31]); \
_mcu_register_wr(x_sram_data, temp_buf[32]); \
_mcu_register_wr(x_sram_data, temp_buf[33]); \
_mcu_register_wr(x_sram_data, temp_buf[34]); \
_mcu_register_wr(x_sram_data, temp_buf[35]); \
_mcu_register_wr(x_sram_data, temp_buf[36]); \
_mcu_register_wr(x_sram_data, temp_buf[37]); \
_mcu_register_wr(x_sram_data, temp_buf[38]); \
_mcu_register_wr(x_sram_data, temp_buf[39]); \
_mcu_register_wr(x_sram_data, temp_buf[40]); \
_mcu_register_wr(x_sram_data, temp_buf[41]); \
_mcu_register_wr(x_sram_data, temp_buf[42]); \
_mcu_register_wr(x_sram_data, temp_buf[43]); \
_mcu_register_wr(x_sram_data, temp_buf[44]); \
_mcu_register_wr(x_sram_data, temp_buf[45]); \
_mcu_register_wr(x_sram_data, temp_buf[46]); \
_mcu_register_wr(x_sram_data, temp_buf[47]); \
_mcu_register_wr(x_sram_data, temp_buf[48]); \
_mcu_register_wr(x_sram_data, temp_buf[49]); \
_mcu_register_wr(x_sram_data, temp_buf[50]); \
_mcu_register_wr(x_sram_data, temp_buf[51]); \
_mcu_register_wr(x_sram_data, temp_buf[52]); \
_mcu_register_wr(x_sram_data, temp_buf[53]); \
_mcu_register_wr(x_sram_data, temp_buf[54]); \
_mcu_register_wr(x_sram_data, temp_buf[55]); \
_mcu_register_wr(x_sram_data, temp_buf[56]); \
_mcu_register_wr(x_sram_data, temp_buf[57]); \
_mcu_register_wr(x_sram_data, temp_buf[58]); \
_mcu_register_wr(x_sram_data, temp_buf[59]); \
_mcu_register_wr(x_sram_data, temp_buf[60]); \
_mcu_register_wr(x_sram_data, temp_buf[61]); \
_mcu_register_wr(x_sram_data, temp_buf[62]); \
_mcu_register_wr(x_sram_data, temp_buf[63]); \
}
#define _sd_wait_48b_resp(); \
{ \
sdc_mode_ctl = 0; \
trace1(0, sd, 0, "The stat register %02x",_mcu_register_rd(x_sdc_stat)); \
sdc_mode_ctl |= kbm_sdc_cmd_48b_rsp; \
trace1(0, sd, 0, "The sdc_mode_ctl register %02x",sdc_mode_ctl); \
sdc_wait_status_with_timeout(kbm_sdc_stat_rsp_rdy,300); \
trace1(0, sd, 0, "The stat register %02x",_mcu_register_rd(x_sdc_stat)); \
}
//Define the various bitmasks for SDC
//For the register sdc_mode_ctl (SDC_MODE_CTL)
#define kbm_sdc_sd_dat 0x20
#define kbm_sdc_rsp_crc_ds 0x10
#define kbm_sdc_mode_cmd 0x0f
#define kbm_sdc_cmd_no_rsp 0x01
#define kbm_sdc_cmd_48b_rsp 0x02
#define kbm_sdc_cmd_136b_rsp 0x04
#define kbm_sdc_cmd_dflt 0x00
//For the register sdc_ctl (SDC_CTL)
#define kbm_sdc_r2_crc_136 0x10
#define kbm_sdc_crc_dis 0x08
#define kbm_sdc_bus_type 0x04
#define kbm_sdc_id_data 0x02
#define kbm_sdc_device_type 0x01
#if (k_log_lun_sd < k_max_log_lun)
//------------------------------------------------------------------------------
// define instance method of enabling the lun mux. since thereis already
// a mechanism for doing this, I'm simply going to use it (defined in fmc.h)
// instead of wrapping a function call in this class (which is the more "OO" pure way
// of encapsulating the "class" methods) to that function.
//
// note it is a FUNCTION not a DFA!!!!
//-------------------------------------------------------------------------------
#undef _v_lun_enable_mux
#define _v_lun_enable_mux fmc_select_sdc
void sd_init_controller() reentrant;
#undef _v_lun_initialize_controller
#define _v_lun_initialize_controller sd_init_controller
//+ ----------------------------------------------------------------------------
// override dfa_lun_reset
//- ----------------------------------------------------------------------------
void dfa_sd_reset() reentrant;
#undef _v_dfa_lun_reset_media
#define _v_dfa_lun_reset_media dfa_sd_reset
//------------------------------------------------------------------------------
// override dfa_lun_initialize
//------------------------------------------------------------------------------
void dfa_sd_initialize() reentrant;
#undef _v_dfa_lun_initialize_media
#define _v_dfa_lun_initialize_media dfa_sd_initialize
//+ ------------------------------------------------------------------------------
// override msc_inquiry
//- ------------------------------------------------------------------------------
void dfa_sd_identify_device() reentrant ;
#undef _v_dfa_lun_identify_media
#define _v_dfa_lun_identify_media dfa_sd_identify_device
//+ ------------------------------------------------------------------------------
// override sd_read
//- ------------------------------------------------------------------------------
void dfa_sd_read() reentrant ;
#undef _v_dfa_lun_read
#define _v_dfa_lun_read dfa_sd_read
//+ ------------------------------------------------------------------------------
// override sd_write
//- ------------------------------------------------------------------------------
void dfa_sd_write() reentrant ;
#undef _v_dfa_lun_write
#define _v_dfa_lun_write dfa_sd_write
//+ ------------------------------------------------------------------------------
// override sd_verify
//- ------------------------------------------------------------------------------
void dfa_sd_verify(void) reentrant ;
#undef _v_dfa_lun_verify
#define _v_dfa_lun_verify dfa_sd_verify
// index into the vtbl
typedef uint8 t_sd_vtbl_ix ;
typedef enum e_sd_vtbl_entry
{
k_sd_vtbl_sz = k_lun_vtbl_sz
} ;
// sd class definition:
#define _v_sd _v_lun
// sd class vtable declaration & vtable size declaration
extern code _vtbl_decl(sd) ;
#endif
#define k_sdc_cmd_read_mult_blocks 0x52
#define k_sdc_cmd_write_mult_blocks 0x59
#define k_sdc_cmd_read_sgl_block 0x51
#define k_sdc_cmd_write_sgl_block 0x58
//sd states
#define k_sdc_state_idle 0
#define k_sdc_state_ready 1
#define k_sdc_state_ident 2
#define k_sdc_state_stby 3
#define k_sdc_state_tran 4
#define k_sdc_state_data 5
#define k_sdc_state_rcv 6
#define k_sdc_state_prg 7
#define k_sdc_state_dis 8
void sd_wait_48b_resp() reentrant;
void sd_get_status() reentrant;
void sdc_read_rsp(uint8 length) reentrant;
void sd_display_rsp_buf() reentrant;
void sd_pre_cmd() reentrant;
void sdc_wait_status_with_timeout(uint8 mask, uint16 ticks) reentrant;
void sd_pre_erase() reentrant;
t_result sdc_wait_irq_with_timeout(uint8 irq_name, uint16 ticks) reentrant;
t_result sd_read_write_end_xfer() reentrant;
t_result sd_read_write_begin_xfer() reentrant;
t_result sd_read_end_burst() reentrant;
t_result sd_read_intra_burst() reentrant;
t_result my_fmc_transfer() reentrant;
t_result sd_read_write_end_xfer() reentrant;
t_result sd_write_begin_burst() reentrant;
t_result sd_read_write_begin_split() reentrant;
#define k_single_data_line 1 /* SDC single data line */
#define k_four_data_lines 2 /* SDC four data lines */
#else
#error "warning: header included too many times!"
#endif // __sd_dot_h__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -