class one_gpio_mode_and_level(Register): mode = DictField( 'mode', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02 }) level = DictField('level', 'uint:8', { LogicLevel.LOW: 0, LogicLevel.HIGH: 1 }) pattern = [mode, level]
class one_gpio_chip_select(Register): control = DictField( 'control', 'uint:8', { ChipSelectControl.DISABLED: 0, ChipSelectControl.ENABLED: 1, ChipSelectControl.ENABLED_EXCLUSIVE: 2 }) pattern = [control]
class event_counter(Register): overflow = BoolField('overflow') mode = DictField( 'mode', 'uint:3', { EventCounterMode.RISING_EDGE: 4, EventCounterMode.FALLING_EDGE: 5, EventCounterMode.NEGATIVE_PULSE: 6, EventCounterMode.POSITIVE_PULSE: 7 }) count = Field('count', 'uint:8') pattern = [overflow, padding(4), mode, count]
class spi_word(Register): clock_phase = DictField('clock_phase', 'uint:1', { ClockPhase.LEADING_EDGE: 0, ClockPhase.TRAILING_EDGE: 1 }) clock_polarity = DictField('clock_polarity', 'uint:1', { ClockPolarity.IDLE_LOW: 0, ClockPolarity.IDLE_HIGH: 1 }) chip_select_mode = DictField('chip_select_mode', 'uint:1', { OutputMode.OPEN_DRAIN: 0, OutputMode.PUSH_PULL: 1 }) clock_frequency = DiscreteRangeField( 'clock_frequency', 'uint:3', operator.ge, [12000000, 6000000, 3000000, 1500000, 750000, 375000, 187500, 93800]) pattern = [ padding(2), clock_phase, clock_polarity, chip_select_mode, clock_frequency ]
class usb_config(Register): vid = Field('vid', 'uintle:16', default=0) pid = Field('pid', 'uintle:16', default=0) max_power_2mA = Field('max_power_2mA', 'uint:8', default=0) power_mode = DictField( 'power_mode', 'uint:8', { PowerMode.BUS_AND_REGULATOR_ON: 0x00, PowerMode.SELF_AND_REGULATOR_OFF: 0x01, PowerMode.SELF_AND_REGULATOR_ON: 0x02 }) major_release = BCDField('major_release', 'uint:8') minor_release = BCDField('minor_release', 'uint:8') transfer_priority = DictField( 'transfer_priority', 'uint:8', { TransferPriority.HIGH_PRIORITY_READ: 0x00, TransferPriority.HIGH_PRIORITY_WRITE: 0x01 }) pattern = [ vid, pid, max_power_2mA, power_mode, major_release, minor_release, transfer_priority ]
def level_f(num): return DictField('gpio%d_level' % num, 'uint:1', { LogicLevel.LOW: 0, LogicLevel.HIGH: 1 })
def mode_f(num): return DictField('gpio%d_mode' % num, 'uint:1', { OutputMode.OPEN_DRAIN: 0, OutputMode.PUSH_PULL: 1 })
class pin_config(Register): gpio0 = DictField( 'gpio0', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO0Mode.CS0_n: 0x03 }) gpio1 = DictField( 'gpio1', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO1Mode.CS1_n: 0x03 }) gpio2 = DictField( 'gpio2', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO2Mode.CS2_n: 0x03 }) gpio3 = DictField( 'gpio3', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO3Mode.CS3_n: 0x03, GPIO3Mode.RTR_n: 0x04, GPIO3Mode.RTR: 0x05 }) gpio4 = DictField( 'gpio4', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO4Mode.CS4_n: 0x03, GPIO4Mode.EVENT_COUNTER_RISING_EDGE: 0x04, GPIO4Mode.EVENT_COUNTER_FALLING_EDGE: 0x05, GPIO4Mode.EVENT_COUNTER_NEGATIVE_PULSE: 0x06, GPIO4Mode.EVENT_COUNTER_POSITIVE_PULSE: 0x07 }) gpio5 = DictField( 'gpio5', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO5Mode.CS5_n: 0x03, GPIO5Mode.CLKOUT: 0x04 }) gpio6 = DictField( 'gpio6', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO6Mode.CS6_n: 0x03 }) gpio7 = DictField( 'gpio7', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO7Mode.CS7_n: 0x03 }) gpio8 = DictField( 'gpio8', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO8Mode.CS8_n: 0x03, GPIO8Mode.SPIACT: 0x04 }) gpio9 = DictField( 'gpio9', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO9Mode.CS9_n: 0x03, GPIO9Mode.SUSPEND: 0x04 }) gpio10 = DictField( 'gpio10', 'uint:8', { GPIOMode.INPUT: 0x00, OutputMode.OPEN_DRAIN: 0x01, OutputMode.PUSH_PULL: 0x02, GPIO10Mode.CS10_n: 0x03, GPIO10Mode.SUSPEND_n: 0x04 }) def mask_pattern(func): return [ padding(1), func('gpio10'), func('gpio9'), func('gpio8'), func('gpio7'), func('gpio6'), func('vpp'), func('gpio5'), func('gpio4'), func('gpio3'), func('gpio2'), func('gpio1'), func('gpio0'), func('mosi'), func('miso'), func('sck') ] gpio_pattern = [ gpio0, gpio1, gpio2, gpio3, gpio4, gpio5, gpio6, gpio7, gpio8, gpio9, gpio10 ] suspend_level_pattern = mask_pattern( lambda pin: DictField('%s_suspend_level' % pin, 'uint:1', { LogicLevel.LOW: 0, LogicLevel.HIGH: 1 })) suspend_mode_pattern = mask_pattern( lambda pin: DictField('%s_suspend_mode' % pin, 'uint:1', { OutputMode.OPEN_DRAIN: 0, OutputMode.PUSH_PULL: 1 })) wakeup_mask_pattern = mask_pattern( lambda pin: BoolField('%s_wakeup_mask' % pin)) wakeup_match_pattern = mask_pattern( lambda pin: DictField('%s_wakeup_match' % pin, 'uint:1', { LogicLevel.LOW: 0, LogicLevel.HIGH: 1 })) divider = [IntField('clock_divider', 'uint:8')] pattern = gpio_pattern + suspend_level_pattern + suspend_mode_pattern + wakeup_mask_pattern + wakeup_match_pattern + divider
def lock_field(name): return DictField(name, 'uint:1', { LockState.LOCKED: 0, LockState.UNLOCKED: 1 })
class rtr_state(Register): active = DictField('active', 'uint:8', {False: 0, True: 1}) pattern = [active]