📄 mcu.h
字号:
//+-----------------------------------------------------------------------------
// 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 + -