]> granicus.if.org Git - esp-idf/commitdiff
can: Fix reset mode entry and exit calls
authorDarian Leung <darian@espressif.com>
Tue, 22 Oct 2019 10:05:19 +0000 (18:05 +0800)
committerDarian Leung <darian@espressif.com>
Thu, 24 Oct 2019 19:40:43 +0000 (03:40 +0800)
This commit fixes multiple bugs caused by incorrect calls to
can_enter_reset_mode() and can_exit_reset_mode. Example test
scripts also updated to match new runners.

components/driver/can.c
examples/peripherals/can/can_alert_and_recovery/example_test.py
examples/peripherals/can/can_network/example_test.py
examples/peripherals/can/can_self_test/example_test.py

index 712b9b126461e440db50714c75211d804218f4b0..2fcda84ee494a85fbdaa46643b7155db627edf04 100644 (file)
@@ -389,7 +389,8 @@ static void can_intr_handler_err_warn(can_status_reg_t *status, int *alert_req)
             can_alert_handler(CAN_ALERT_ABOVE_ERR_WARN, alert_req);
         } else if (p_can_obj->control_flags & CTRL_FLAG_RECOVERING) {
             //Bus recovery complete.
-            can_enter_reset_mode();
+            esp_err_t err = can_enter_reset_mode();
+            assert(err == ESP_OK);
             //Reset and set flags to the equivalent of the stopped state
             CAN_RESET_FLAG(p_can_obj->control_flags, CTRL_FLAG_RECOVERING | CTRL_FLAG_ERR_WARN |
                                                      CTRL_FLAG_ERR_PASSIVE | CTRL_FLAG_BUS_OFF |
@@ -703,7 +704,7 @@ esp_err_t can_driver_install(const can_general_config_t *g_config, const can_tim
     }
     periph_module_reset(PERIPH_CAN_MODULE);
     periph_module_enable(PERIPH_CAN_MODULE);            //Enable APB CLK to CAN peripheral
-    esp_err_t err = can_exit_reset_mode();              //Must enter reset mode to write to config registers
+    esp_err_t err = can_enter_reset_mode();              //Must enter reset mode to write to config registers
     assert(err == ESP_OK);
     can_config_pelican();                               //Use PeliCAN addresses
     /* Note: REC is allowed to increase even in reset mode. Listen only mode
@@ -765,7 +766,7 @@ esp_err_t can_driver_uninstall(void)
     //Check state
     CAN_CHECK_FROM_CRIT(p_can_obj != NULL, ESP_ERR_INVALID_STATE);
     CAN_CHECK_FROM_CRIT(p_can_obj->control_flags & (CTRL_FLAG_STOPPED | CTRL_FLAG_BUS_OFF), ESP_ERR_INVALID_STATE);
-    esp_err_t err = can_exit_reset_mode();  //Enter reset mode to stop any CAN bus activity
+    esp_err_t err = can_enter_reset_mode();  //Enter reset mode to stop any CAN bus activity
     assert(err == ESP_OK);
     //Clear registers by reading
     (void) can_get_interrupt_reason();
@@ -804,7 +805,7 @@ esp_err_t can_start(void)
     //Reset RX queue, and RX message count
     xQueueReset(p_can_obj->rx_queue);
     p_can_obj->rx_msg_count = 0;
-    esp_err_t err = can_exit_reset_mode(); //Should already be in bus-off mode, set again to make sure
+    esp_err_t err = can_enter_reset_mode(); //Should already be in bus-off mode, set again to make sure
     assert(err == ESP_OK);
 
     //Currently in listen only mode, need to set to mode specified by configuration
@@ -834,7 +835,7 @@ esp_err_t can_stop(void)
     CAN_CHECK_FROM_CRIT(!(p_can_obj->control_flags & (CTRL_FLAG_STOPPED | CTRL_FLAG_BUS_OFF)), ESP_ERR_INVALID_STATE);
 
     //Clear interrupts and reset flags
-    esp_err_t err = can_exit_reset_mode();
+    esp_err_t err = can_enter_reset_mode();
     assert(err == ESP_OK);
     (void) can_get_interrupt_reason();          //Read interrupt register to clear interrupts
     can_config_mode(CAN_MODE_LISTEN_ONLY);      //Set to listen only mode to freeze REC
index 21341ed4c1c23f4c418d583821a178f7f3ac4fd9..c348dfef7cda4c3c818c5b4c4f91d208ff6e1c5d 100644 (file)
@@ -19,10 +19,10 @@ STR_EXPECT = ("CAN Alert and Recovery: Driver installed", "CAN Alert and Recover
 EXPECT_TIMEOUT = 20
 
 
-@IDF.idf_example_test(env_tag='Example_CAN')
+@IDF.idf_example_test(env_tag='Example_CAN1')
 def test_can_alert_and_recovery_example(env, extra_data):
     # Get device under test, flash and start example. "dut4" must be defined in EnvConfig
-    dut = env.get_dut('dut4', 'examples/peripherals/can/can_alert_and_recovery')
+    dut = env.get_dut('dut1', 'examples/peripherals/can/can_alert_and_recovery')
     dut.start_app()
 
     for string in STR_EXPECT:
index d8f249bc5ff851646d82939ac2bfde4b9fc718a1..9fcb454f6f69281d09066d64edafec280af56028 100644 (file)
@@ -17,7 +17,7 @@ except ImportError:
 # Define tuple of strings to expect for each DUT.
 master_expect = ("CAN Master: Driver installed", "CAN Master: Driver uninstalled")
 slave_expect = ("CAN Slave: Driver installed", "CAN Slave: Driver uninstalled")
-listen_only_expect = ("CAN Listen Only: Driver installed", "Listen Only: Driver uninstalled")
+listen_only_expect = ("CAN Listen Only: Driver installed", "CAN Listen Only: Driver uninstalled")
 
 
 def dut_thread_callback(**kwargs):
@@ -36,7 +36,7 @@ def dut_thread_callback(**kwargs):
     result[0] = True
 
 
-@IDF.idf_example_test(env_tag='Example_CAN')
+@IDF.idf_example_test(env_tag='Example_CAN2')
 def test_can_network_example(env, extra_data):
 
     # Get device under test. "dut1", "dut2", and "dut3" must be properly defined in EnvConfig
index 28b1f4eb8b11493e59f2e19921fd78f07713b0d1..3f61800e8c73daea47d87bb970e6daa27d0a6414 100644 (file)
@@ -19,10 +19,10 @@ STR_EXPECT = ("CAN Self Test: Driver installed", "CAN Self Test: Driver uninstal
 EXPECT_TIMEOUT = 20
 
 
-@IDF.idf_example_test(env_tag='Example_CAN')
+@IDF.idf_example_test(env_tag='Example_CAN1')
 def test_can_self_test_example(env, extra_data):
     # Get device under test, flash and start example. "dut4" must be defined in EnvConfig
-    dut = env.get_dut('dut4', 'examples/peripherals/can/can_self_test')
+    dut = env.get_dut('dut1', 'examples/peripherals/can/can_self_test')
     dut.start_app()
 
     for string in STR_EXPECT: