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

📄 pcmcia-pxa.h

📁 pocket pc hx4700 bootloader
💻 H
字号:
/* MECR: Expansion Memory Configuration Register * (SA-1100 Developers Manual, p.10-13; SA-1110 Developers Manual, p.10-24) * * MECR layout is:   * *   FAST1 BSM1<4:0> BSA1<4:0> BSIO1<4:0> FAST0 BSM0<4:0> BSA0<4:0> BSIO0<4:0> * * (This layout is actually true only for the SA-1110; the FASTn bits are * reserved on the SA-1100.) */#define MCXX_SETUP_MASK     (0x7f)#define MCXX_ASST_MASK      (0x1f)#define MCXX_HOLD_MASK      (0x3f)#define MCXX_SETUP_SHIFT    (0)#define MCXX_ASST_SHIFT     (7)#define MCXX_HOLD_SHIFT     (14)#define MECR_SET(mecr, sock, shift, mask, bs) \((mecr)=((mecr)&~(((mask)<<(shift))<<\                  ((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT)))|\        (((bs)<<(shift))<<((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT)))#define MECR_GET(mecr, sock, shift, mask) \((((mecr)>>(((sock)==0)?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT))>>\ (shift))&(mask))#define MECR_BSIO_SET(mecr, sock, bs) \MECR_SET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK, (bs))#define MECR_BSIO_GET(mecr, sock) \MECR_GET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK)#define MECR_BSA_SET(mecr, sock, bs) \MECR_SET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK, (bs))#define MECR_BSA_GET(mecr, sock) \MECR_GET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK)#define MECR_BSM_SET(mecr, sock, bs) \MECR_SET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK, (bs))#define MECR_BSM_GET(mecr, sock) \MECR_GET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK)#define MECR_FAST_SET(mecr, sock, fast) \MECR_SET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK, (fast))#define MECR_FAST_GET(mecr, sock) \MECR_GET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK)/* This function implements the BS value calculation for setting the MECR * using integer arithmetic: */static inline unsigned int pxa_pcmcia_mecr_bs(unsigned int pcmcia_cycle_ns, unsigned int cpu_clock_khz){	unsigned int t = ((pcmcia_cycle_ns * cpu_clock_khz) / 6) - 1000000;	return (t / 1000000) + (((t % 1000000) == 0) ? 0 : 1);}static inline unsigned int pxa_mcxx_hold(unsigned int pcmcia_cycle_ns, unsigned int mem_clk_10khz){	unsigned int code = pcmcia_cycle_ns * mem_clk_10khz;	return (code / 300000) + ((code % 300000) ? 1 : 0) - 1;}static inline unsigned int pxa_mcxx_asst(unsigned int pcmcia_cycle_ns, unsigned int mem_clk_10khz){	unsigned int code = pcmcia_cycle_ns * mem_clk_10khz;	return (code / 300000) + ((code % 300000) ? 1 : 0) - 1;}static inline unsigned int pxa_mcxx_setup(unsigned int pcmcia_cycle_ns, unsigned int mem_clk_10khz) {	unsigned int code = pcmcia_cycle_ns * mem_clk_10khz;	return (code / 100000) + ((code % 100000) ? 1 : 0) - 1;}/* This function returns the (approxmiate) command assertion period, in * nanoseconds, for a given CPU clock frequency and MCXX_ASST value: */static inline unsigned int pxa_pcmcia_cmd_time(unsigned int mem_clk_10khz, unsigned int pcmcia_mcxx_asst) {	return (300000 * (pcmcia_mcxx_asst + 1) / mem_clk_10khz);}#define PXA_PCMCIA_IO_ACCESS      (165)#define PXA_PCMCIA_5V_MEM_ACCESS  (150)#define PXA_PCMCIA_3V_MEM_ACCESS  (300)/* Crystal clock */#define BASE_CLK	3686400/* * Return the current lclk requency in units of 10kHz */unsigned int get_lclk_frequency_10khz(void) {	/* Crystal Frequency to Memory Frequency Multiplier (L) */	unsigned char L_clk_mult[32] = { 0, 27, 32, 36, 40, 45, 0 };	return L_clk_mult[(CCCR >> 0) & 0x1f] * BASE_CLK / 10000;}

⌨️ 快捷键说明

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