X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=test-modbus%2Ftest.c;h=ffe516f498b3d0ce993682ada52c8c9bba197727;hb=832142c0afc865e125a978f590ba5f5dcce17219;hp=4dc1f41757f2aaf86d68261ae88e540c9857e050;hpb=f8c650828fe1cedb50bc66b636ab76756ec67837;p=home-hw.git diff --git a/test-modbus/test.c b/test-modbus/test.c index 4dc1f41..ffe516f 100644 --- a/test-modbus/test.c +++ b/test-modbus/test.c @@ -11,12 +11,13 @@ static void clock_setup(void) { - rcc_clock_setup_in_hse_8mhz_out_72mhz(); + rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); rcc_periph_clock_enable(RCC_GPIOA); rcc_periph_clock_enable(RCC_GPIOB); rcc_periph_clock_enable(RCC_GPIOC); rcc_periph_clock_enable(RCC_USART2); + rcc_periph_clock_enable(RCC_USART3); rcc_periph_clock_enable(RCC_TIM2); rcc_periph_clock_enable(RCC_TIM4); @@ -24,6 +25,7 @@ static void clock_setup(void) rcc_periph_reset_pulse(RST_GPIOB); rcc_periph_reset_pulse(RST_GPIOC); rcc_periph_reset_pulse(RST_USART2); + rcc_periph_reset_pulse(RST_USART3); rcc_periph_reset_pulse(RST_TIM2); rcc_periph_reset_pulse(RST_TIM4); } @@ -33,6 +35,11 @@ static void gpio_setup(void) // PC13 = BluePill LED gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO13); gpio_clear(GPIOC, GPIO13); + + // Pins for MODBUS USART + gpio_set_mode(GPIOB, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_USART3_RX); + gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_USART3_TX); + gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO1); } static volatile u32 ms_ticks; @@ -56,12 +63,12 @@ static void delay_ms(uint ms) ; } -static void usart_setup(void) +static void debug_setup(void) { -#if 0 gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_USART2_TX); + gpio_set_mode(GPIOA, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_USART2_RX); - usart_set_baudrate(USART2, 9600); + usart_set_baudrate(USART2, 115200); usart_set_databits(USART2, 8); usart_set_stopbits(USART2, USART_STOPBITS_1); usart_set_mode(USART2, USART_MODE_TX_RX); @@ -69,7 +76,6 @@ static void usart_setup(void) usart_set_flow_control(USART2, USART_FLOWCONTROL_NONE); usart_enable(USART2); -#endif } int main(void) @@ -77,35 +83,84 @@ int main(void) clock_setup(); gpio_setup(); tick_setup(); - usart_setup(); + debug_setup(); + debug_printf("Chramst!\n"); modbus_init(); cm_enable_interrupts(); // FIXME: Needed? -#if 0 - timer_set_prescaler(TIM4, 7); // clock = 72 MHz / 8 = 18 MHz FIXME! - timer_set_mode(TIM4, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); - timer_disable_preload(TIM4); - timer_set_period(TIM4, 255); // PWM frequency = 18 MHz / 256 = 70.3125 kHz - timer_set_oc_mode(TIM4, TIM_OC1, TIM_OCM_PWM1); - timer_set_oc_value(TIM4, TIM_OC1, 128); - timer_set_oc_polarity_high(TIM4, TIM_OC1); - timer_enable_counter(TIM4); - timer_enable_oc_output(TIM4, TIM_OC1); -#endif - - gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO6); - // gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO8); - for (;;) { - //gpio_toggle(GPIOC, GPIO13); + debug_led_toggle(); delay_ms(50); - // gpio_toggle(GPIOA, GPIO8); - //timer_set_oc_mode(TIM4, TIM_OC1, TIM_OCM_FORCE_LOW); - //delay_ms(50); - //timer_set_oc_mode(TIM4, TIM_OC1, TIM_OCM_FORCE_HIGH); modbus_loop(); } return 0; } + +/*** Modbus callbacks ***/ + +bool modbus_check_discrete_input(u16 addr UNUSED) +{ + return false; +} + +bool modbus_get_discrete_input(u16 addr UNUSED) +{ + return false; +} + +bool modbus_check_coil(u16 addr UNUSED) +{ + return false; +} + +bool modbus_get_coil(u16 addr UNUSED) +{ + return false; +} + +void modbus_set_coil(u16 addr UNUSED, bool value UNUSED) +{ +} + +bool modbus_check_input_register(u16 addr UNUSED) +{ + return false; +} + +u16 modbus_get_input_register(u16 addr UNUSED) +{ + return 0; +} + +bool modbus_check_holding_register(u16 addr UNUSED) +{ + return (addr < 16); +} + +u16 modbus_get_holding_register(u16 addr UNUSED) +{ + return 0xbeef; +} + +void modbus_set_holding_register(u16 addr UNUSED, u16 value UNUSED) +{ +} + +void modbus_ready_hook(void) +{ +} + +void modbus_frame_start_hook(void) +{ +} + +const char * const modbus_id_strings[MODBUS_ID_MAX] = { + [MODBUS_ID_VENDOR_NAME] = "United Computer Wizards", + [MODBUS_ID_PRODUCT_CODE] = "42", + [MODBUS_ID_MAJOR_MINOR_REVISION] = "1.0", + [MODBUS_ID_VENDOR_URL] = "http://www.ucw.cz/", + [MODBUS_ID_PRODUCT_NAME] = "Magic Gadget", + [MODBUS_ID_USER_APP_NAME] = NULL, +};