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

📄 mcu.h

📁 U盘控制器USB97C223的固件代码,对2kPAGE NAND FLASH 有很好的支持.
💻 H
📖 第 1 页 / 共 5 页
字号:

//+-----------------------------------------------------------------------------
// Name:
//   _mcu_register_clr_bits
//
// Declaration:
//   void _mcu_register_clr_bits(t_mcu_register reg, t_bit_mask bitmsk);
//
// Purpose:
//   Clear a group of bits in a mcu register to a logic zero level.
//
// Arguments:
//   reg    - the t_mcu_register to be written.
//   bitmsk - a t_bit_mask containing 1's in the bit positions of the bits to be cleared.
//
// Return:
//   None.
//
// Notes:
//   This is a read/modify/write operation.
//   It should not be used on registers that are read only, write only,
//   or access different hardware entities on read and write.  E.g, writing
//   sets control, reading provides status.
//
// Since:
//   MinimOS 2.1
//------------------------------------------------------------------------------
#define _mcu_register_clr_bits(__ref, __bitmsk) _mcu_register_wr((__ref), _mcu_register_rd((__ref)) & ~(__bitmsk))

//------------------------------------------------------------------------------
#define _lo(__msk) { _mcu_register_clr_bits(x_gpioa_out, (__msk)); }
#define _hi(__msk) { _mcu_register_set_bits(x_gpioa_out, (__msk)); }

//------------------------------------------------------------------------------
//
//    1     000   0    0
//   11    0   0   0  0
//    1    0   0    00    10X MCU FAMILY REGISTER DECLARATIONS
//    1    0   0   0  0
//  11111   000   0    0
//
//------------------------------------------------------------------------------
#ifdef k_10x_family

//------------------------------------------------------------------------------
#define k_max_pnr                       32
#define kbm_pnr                         0x1F
#define k_max_txfifo                    16
#define k_max_gpfifo                    4

//------------------------------------------------------------------------------
#define k_isaio_window                  0x4000
#define k_isamem_window                 0x5000

//------------------------------------------------------------------------------
// mcu registers and bit definitions
t_mcu_register x_isr0                at_mcu(7F00);  // r    int0 source register
t_mcu_register x_imr0                at_mcu(7F01);  // rw   int0 mask register
// x_isr0/x_imr0 bits
#define kbm_isr0_irq3                0x80      // r/rw
#define kbm_isr0_irq2                0x40      // r/rw
#define kbm_isr0_irq1                0x20      // r/rw
#define kbm_isr0_irq0                0x10      // r/rw
#define kbm_isr0_rxpkt               0x08      // r/rw
#define kbm_isr0_tx_empty            0x04      // r/rw
#define kbm_isr0_txpkt               0x02      // r/rw
#define kbm_isr0_isadma              0x01      // r/rw

//------------------------------------------------------------------------------
t_mcu_register x_isr1                at_mcu(7F02);  // r    int1 source register
t_mcu_register x_imr1                at_mcu(7F03);  // rw   int1 mask register
// x_isr1/x_imr1 bits
#define kbm_isr1_eot                 0x10      // r/rw
#define kbm_isr1_sof                 0x08      // r/rw
#define kbm_isr1_alloc               0x04      // r/rw
#define kbm_isr1_rxovrn              0x02      // r/rw
#define kbm_isr1_pwrmng              0x01      // r/rw

//------------------------------------------------------------------------------
t_mcu_register x_chip_rev            at_mcu(7F06);  // r    device revision register
t_mcu_register x_chip_id             at_mcu(7F07);  // r    device id register

//------------------------------------------------------------------------------
t_mcu_register x_gpfifo0             at_mcu(7F10);  // rw  8-byte deep gp fifo
t_mcu_register x_gpfifo0_sts         at_mcu(7F11);  // r   status for above
t_mcu_register x_gpfifo1             at_mcu(7F12);  // rw  8-byte deep gp fifo
t_mcu_register x_gpfifo1_sts         at_mcu(7F13);  // r   status for above
t_mcu_register x_gpfifo2             at_mcu(7F14);  // rw  8-byte deep gp fifo
t_mcu_register x_gpfifo2_sts         at_mcu(7F15);  // r   status for above
t_mcu_register x_gpfifo3             at_mcu(7F16);  // rw  8-byte deep gp fifo
t_mcu_register x_gpfifo3_sts         at_mcu(7F17);  // r   status for above
// x_gpfifo#_sts bits
#define kbm_gpfifo_full              0x02      // r
#define kbm_gpfifo_empty             0x01      // r

//------------------------------------------------------------------------------
t_mcu_register x_gpioa_dir           at_mcu(7F18);  // rw   gpio configuration register
t_mcu_register x_gpioa_out           at_mcu(7F19);  // rw   gpio data output register
t_mcu_register x_gpioa_in            at_mcu(7F1A);  // r    gpio data input register
// x_gpioa_dir/x_gpioa_out/x_gpioa_in bits
#define kbm_gpio7                    0x80      // rw/rw/R
#define kbm_gpio6                    0x40      // rw/rw/R
#define kbm_gpio5                    0x20      // rw/rw/R
#define kbm_gpio4                    0x10      // rw/rw/R
#define kbm_gpio3                    0x08      // rw/rw/R
#define kbm_gpio_t1                  0x08      // rw/rw/R
#define kbm_gpio2                    0x04      // rw/rw/R
#define kbm_gpio_t0                  0x04      // rw/rw/R
#define kbm_gpio1                    0x02      // rw/rw/R
#define kbm_gpio_txd                 0x02      // rw/rw/R
#define kbm_gpio0                    0x01      // rw/rw/R
#define kbm_gpio_rxd                 0x01      // rw/rw/R

//------------------------------------------------------------------------------
t_mcu_register x_util_config         at_mcu(7F1B);  // rw   misc configuration register
// x_util_config bits
#define kbm_util_config_t1           0x08      // rw
#define kbm_util_config_t0           0x04      // rw
#define kbm_util_config_rxd          0x02      // rw
#define kbm_util_config_txd          0x01      // rw

//------------------------------------------------------------------------------
t_mcu_register x_clock_sel           at_mcu(7F27);  // rw   8051 and 8237 clock select register
// x_clock_sel bits
#define kbm_clksel_sleep             0x80      // rw
#define kbm_clksel_rosc_en           0x40      // rw
#define kbm_clksel_mcuclk_src        0x20      // rw
#define kbm_clksel_mcu_clk1          0x10      // rw
#define kbm_clksel_mcu_clk0          0x08      // rw
#define kbm_clksel_isadmaclk_ext     0x04      // rw
#define kbm_clksel_isadmaclk_1       0x02      // rw
#define kbm_clksel_isadmaclk_0       0x01      // rw
// mcu clock speeds
#define kbm_clksel_mcu24_mhz         0x18      // rw
#define kbm_clksel_mcu16_mhz         0x10      // rw
#define kbm_clksel_mcu12_mhz         0x08      // rw
#define kbm_clksel_mcu8_mhz          0x00      // rw
// dmac clock speeds
#define kbm_clksel_dma8_mhz          0x03      // rw
#define kbm_clksel_dma4_mhz          0x02      // rw
#define kbm_clksel_dma2_mhz          0x01      // rw
#define kbm_clksel_dma_stop          0x00      // rw

//------------------------------------------------------------------------------
t_mcu_register x_mem_bank1           at_mcu(7F29);  // rw   flash bank select
#ifndef k_mcu_97100  // this register is not present on the '100
t_mcu_register x_mem_bank2           at_mcu(7F28);  // rw   flash bank select
#endif

//------------------------------------------------------------------------------
t_mcu_register x_wu_src1             at_mcu(7F2A);  // r    wakeup source1
t_mcu_register x_wu_msk1             at_mcu(7F2B);  // rw   wakeup mask1
// x_wu_src1/x_wu_msk1 bits
#define kbm_wk1_usb_reset            0x04      // r/rw
#define kbm_wk1_resume               0x02      // r/rw
#define kbm_wk1_suspend              0x01      // r/rw

//------------------------------------------------------------------------------
t_mcu_register x_wu_src2             at_mcu(7F2C);  // r    wakeup source1
t_mcu_register x_wu_msk2             at_mcu(7F2D);  // rw   wakeup mask1
// x_wu_src2/x_wu_msk2 bits
#define kbm_wk2_irq3                 0x08      // r/rw
#define kbm_wk2_irq2                 0x04      // r/rw
#define kbm_wk2_irq1                 0x02      // r/rw
#define kbm_wk2_irq0                 0x01      // r/rw

//------------------------------------------------------------------------------
t_mcu_register x_bus_req             at_mcu(7F70);  // rw   isa bus request register
// x_bus_req bits
#define kbm_bus_req_inh_tc3           0x80      // rw
#define kbm_bus_req_inh_tc2           0x40      // rw
#define kbm_bus_req_inh_tc1           0x20      // rw
#define kbm_bus_req_inh_tc0           0x10      // rw
#define kbm_bus_req_reset_dmac        0x08      // rw
#define kbm_bus_req_aen               0x04      // r
#define kbm_bus_req_hlda              0x02      // rw
#define kbm_bus_req_hreq              0x01      // r

//------------------------------------------------------------------------------
t_mcu_register x_iobase              at_mcu(7F71);  // rw   8051 isa i/o window base reg
t_mcu_register x_membase             at_mcu(7F72);  // rw   8051 isa mem window base reg

//------------------------------------------------------------------------------
t_mcu_register x_bus_stat            at_mcu(7F73);  // r    isadma request status
t_mcu_register x_bus_msk             at_mcu(7F74);  // rw   isadma request int mask
// x_bus_stat/x_bus_msk bits
#define kbm_bus_stat_ch3rq           0x80      // r/rw
#define kbm_bus_stat_ch2rq           0x40      // r/rw
#define kbm_bus_stat_ch1rq           0x20      // r/rw
#define kbm_bus_stat_ch0rq           0x10      // r/rw
#define kbm_bus_stat_ch3tc           0x08      // r/rw
#define kbm_bus_stat_ch2tc           0x04      // r/rw
#define kbm_bus_stat_ch1tc           0x02      // r/rw
#define kbm_bus_stat_ch0tc           0x01      // r/rw

//------------------------------------------------------------------------------
t_mcu_register x_mmu_data            at_mcu(6000);  // rw 8051-mmu data window reg (fifo)
t_mcu_register x_prl                 at_mcu(7F50);  // rw 8051-mmu pointer reg (low)
t_mcu_register x_prh                 at_mcu(7F51);  // rw 8051-mmu pointer reg (hi) & r/w
// x_prh bits
#define kbm_prh_rcv                  0x80      // rw
#define kbm_prh_pnr                  0x00      // rw, alternative to rcv_
#define kbm_prh_auto_incr            0x40      // rw
#define kbm_prh_read                 0x20      // rw
#define kbm_prh_write                0x00      // rw, alternative to read_
#define kbm_prh_adhi_msk             0x07      // rw, mask for high address bits

//------------------------------------------------------------------------------
t_mcu_register x_mmutx_sel           at_mcu(7F52);  // rw 8051-mmu fifo select for tx cmds
t_mcu_register x_mmucr               at_mcu(7F53);  // W  8051-mmu command register
// x_mmucr commands
#define k_mmucr_reset_tx             0xE0      // W
#define k_mmucr_enqueue              0xC0      // W
#define k_mmucr_release              0xA0      // W
#define k_mmucr_remove_release       0x80      // W
#define k_mmucr_remove               0x60      // W
#define k_mmucr_reset_mmu            0x40      // W
#define k_mmucr_allocate             0x20      // W
#define k_mmucr_noop                 0x00      // W

//------------------------------------------------------------------------------
t_mcu_register x_arr                 at_mcu(7F54);  // r  8051-mmu allocation result reg
// x_arr bits
#define kbm_arr_failed               0x80      // r
#define kbm_arr_pnr_msk              0x1F      // r

//------------------------------------------------------------------------------
t_mcu_register x_pnr                 at_mcu(7F55);  // rw 8051-mmu packet number reg

//------------------------------------------------------------------------------
t_mcu_register x_pags_free           at_mcu(7F56);  // rw 8051-mmu #free pages & nak_allrx
// x_pags_free bits
#define kbm_pags_free_nak_allrx      0x80      // rw
#define kbm_pags_free_count_msk      0x3F      // r

//------------------------------------------------------------------------------
t_mcu_register x_tx_mgmt2            at_mcu(7F57);  // r  tx Completion fifo & status
// x_tx_mgmt2 bits
#define kbm_ctx_empty                0x80      // r
#define kbm_ctx_full                 0x40      // r

//------------------------------------------------------------------------------
t_mcu_register x_rxfifo              at_mcu(7F58);  // r  rx Pkt fifo register (all eps)
// x_rxfifo bits
#define kbm_rxfifo_empty             0x80      // r
#define kbm_rxfifo_full              0x40      // r

//------------------------------------------------------------------------------
t_mcu_register x_pop_tx              at_mcu(7F59);  // r  pops txfifo[x_mmutx_sel] head pkt
// x_pop_tx bits
#define kbm_poptx_stat               0x80      // r
#define kbm_pop_tx_empty             0x80      // r

//------------------------------------------------------------------------------
t_mcu_register x_txstat_a            at_mcu(7F60);  // r  tx pkt fifo status reg (ep0-3)
// x_txstat_a bits
#define kbm_txstat_a_ep3tx_empty     0x80      // r

⌨️ 快捷键说明

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