]> mj.ucw.cz Git - home-hw.git/blobdiff - test-modbus/test.c
Auto: Meditation mode turned off
[home-hw.git] / test-modbus / test.c
index 381b2ed58aec7a34f4e05e665a6ea12b4a0eec22..ffe516f498b3d0ce993682ada52c8c9bba197727 100644 (file)
 
 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);
 }
@@ -35,9 +37,9 @@ static void gpio_setup(void)
        gpio_clear(GPIOC, GPIO13);
 
        // Pins for MODBUS USART
-       gpio_set_mode(GPIOA, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_USART2_RX);
-       gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_USART2_TX);
-       gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO1);
+       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;
@@ -61,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);
@@ -74,7 +76,6 @@ static void usart_setup(void)
        usart_set_flow_control(USART2, USART_FLOWCONTROL_NONE);
 
        usart_enable(USART2);
-#endif
 }
 
 int main(void)
@@ -82,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,
+};