Source code for ifgen.svd.peripherals

"""
A module implementing a 'peripherals' SVD-element processor.
"""

# built-in
from xml.etree import ElementTree

# third-party
from vcorelib.logging import LoggerType

# internal
from ifgen.svd.model.derived import derived_from_stack
from ifgen.svd.model.peripheral import Peripheral
from ifgen.svd.process import handle_registers
from ifgen.svd.task import SvdProcessingTask


[docs] def process_peripheral( elem: ElementTree.Element, task: SvdProcessingTask, logger: LoggerType, system_width_bits: int = 32, ) -> None: """Process a SVD peripheral element.""" derived_periph = None derived = elem.attrib.get("derivedFrom") if derived is not None: derived_periph = task.model.peripherals[derived] peripheral = Peripheral.create( elem, derived_periph, [], [], [], system_width_bits ) peripheral.log(elem, logger) # Handle registers. registers = elem.find("registers") if registers is not None: peripheral.registers = handle_registers(registers, peripheral) # Handle address blocks. for address_block in elem.iterfind("addressBlock"): peripheral.handle_address_block(address_block) # Handle interrupts. for interrupt in elem.iterfind("interrupt"): peripheral.handle_interrupt(interrupt) task.model.register_peripheral(elem, peripheral)
[docs] def process_peripherals( elem: ElementTree.Element, task: SvdProcessingTask, logger: LoggerType ) -> None: """Process a SVD peripherals element.""" del logger for item in derived_from_stack(elem.iterfind("peripheral")): task.process(item)