30 #include <libopencmsis/core_cm3.h> 31 #include <libopencm3/stm32/rcc.h> 32 #include <libopencm3/stm32/gpio.h> 33 #include <libopencm3/stm32/timer.h> 41 #define MICROWIRE_MASTER_SDO_PORT A 42 #define MICROWIRE_MASTER_SDO_PIN 0 43 #define MICROWIRE_MASTER_SDI_PORT A 44 #define MICROWIRE_MASTER_SDI_PIN 2 45 #define MICROWIRE_MASTER_SCK_PORT A 46 #define MICROWIRE_MASTER_SCK_PIN 4 52 #define MICROWIRE_MASTER_TIMER 4 56 uint8_t mirowire_master_address_size = 0; 63 if (0==frequency || 0==address_size) {
83 uint16_t prescaler = rcc_ahb_frequency/(frequency*2)/(uint32_t)(1<<16)+1;
85 uint16_t period = (rcc_ahb_frequency/prescaler)/(frequency*2);
88 SCB_SCR |= SCB_SCR_SEVEONPEND;
153 if ((address>>(bit-1))&0x01) {
201 for (
size_t i=0; i<length; i++) {
204 data[i] |= (1<<(b-1));
206 data[i] &= ~(1<<(b-1));
248 if (data&(1<<(b-1))) {
307 if (data&(1<<(b-1))) {
void microwire_master_setup(uint32_t frequency, bool organization_x16, uint8_t address_size)
setup microwire peripheral
static void microwire_master_stop(void)
stop microwire communication and end all activities
static void microwire_master_wait_clock(void)
wait for clock tick used to synchronise communication
void microwire_master_wait_ready(void)
wait until slave is ready after a write or erase
#define RCC_GPIO(x)
get RCC for GPIO based on GPIO identifier
static void microwire_master_send_bit(bool bit)
send bit over microwire
#define MICROWIRE_MASTER_SDI_PIN
SDO input signal pin (to be connected on Q slave signal)
void microwire_master_write_disable(void)
disable write and erase operations
void microwire_master_erase_all(void)
erase all memory
void microwire_master_write(uint32_t address, uint16_t data)
write data to slave memory
#define NVIC_TIM_IRQ(x)
get NVIC IRQ for timer base on TIM identifier
#define MICROWIRE_MASTER_SDO_PORT
SDO output signal port (to be connected on D slave signal)
uint8_t mirowire_master_address_size
address size used in operations (slave specific)
#define MICROWIRE_MASTER_SCK_PORT
SCK output signal port (to be connected on C slave signal)
#define MICROWIRE_MASTER_TIMER
timer peripheral
global definitions and methods (API)
#define GPIO(x)
get GPIO based on GPIO identifier
#define MICROWIRE_MASTER_SDI_PORT
SDO input signal port (to be connected on Q slave signal)
void microwire_master_read(uint32_t address, uint16_t *data, size_t length)
read data from slave memory
#define RCC_TIM(x)
get RCC for timer based on TIM identifier
static bool microwire_master_read_bit(void)
read bit from microwire communication
void microwire_master_write_enable(void)
enable write and erase operations
void microwire_master_write_all(uint16_t data)
write data to all slave memory
#define MICROWIRE_MASTER_SDO_PIN
SDO output signal pin (to be connected on D slave signal)
static void microwire_master_start(uint8_t operation, uint32_t address)
initialize microwire communication and send header (with leading start bit '1')
void microwire_master_erase(uint32_t address)
erase memory
bool mirowire_master_organization_x16
organization used (true=x16, false=x8)
#define TIM(x)
get TIM based on TIM identifier
#define MICROWIRE_MASTER_SCK_PIN
SCK output signal pin (to be connected on C slave signal)
library to communicate using microwore as master (API)