1+ /**
2+ *Copyright: Copyright (c) 2019
3+ *Created on 2019-8-12
4+ *Author: YuaniLee
5+ */
6+ #include "drive_control.h"
7+
8+ /*L298N_init*/
9+ void L298N_init (void ) {
10+
11+ PMOD_L = gpio_get_dev (DW_GPIO_PORT_A );
12+ PMOD_L -> gpio_open (L298N_L_MASK );
13+ PMOD_L -> gpio_control (GPIO_CMD_SET_BIT_DIR_OUTPUT , (void * )L298N_L_MASK );
14+
15+ PMOD_R = gpio_get_dev (DW_GPIO_PORT_A );
16+ PMOD_R -> gpio_open (L298N_R_MASK );
17+ PMOD_R -> gpio_control (GPIO_CMD_SET_BIT_DIR_OUTPUT , (void * )L298N_R_MASK );
18+
19+ PMOD_F = gpio_get_dev (DW_GPIO_PORT_A );
20+ PMOD_F -> gpio_open (L298N_F_MASK );
21+ PMOD_F -> gpio_control (GPIO_CMD_SET_BIT_DIR_OUTPUT , (void * )L298N_F_MASK );
22+
23+ PMOD_H = gpio_get_dev (DW_GPIO_PORT_C );
24+ PMOD_H -> gpio_open (L298N_H_MASK );
25+ PMOD_H -> gpio_control (GPIO_CMD_SET_BIT_DIR_OUTPUT , (void * )L298N_H_MASK );
26+
27+ }
28+
29+
30+ /**
31+ * \brief Control move.
32+ * \param dire.Direction of move.
33+ * \param pwm_left.Left PWM control.
34+ * \param pwm_right.Right PWM control.
35+ */
36+ void car_set (uint32_t dire ,uint32_t pwm_left , uint32_t pwm_right ) {
37+ switch (dire ) {
38+ /*****stop*****/
39+ case 0 :
40+ PWM_L = 0 ;
41+ PWM_R = 0 ;
42+ break ;
43+ /*****forward*****/
44+ case 1 :
45+ PMOD_F -> gpio_write (0x30000000 ,L298N_F_MASK );
46+ PMOD_H -> gpio_write (0x00000000 ,L298N_H_MASK );
47+ PWM_L = speed ;
48+ PWM_R = speed ;
49+ break ;
50+ /*****left*****/
51+ case 2 :
52+ PMOD_F -> gpio_write (0x30000000 ,L298N_F_MASK );
53+ PMOD_H -> gpio_write (0x00000000 ,L298N_H_MASK );
54+
55+ PMOD_R -> gpio_write (0x80000000 ,L298N_R_MASK );
56+ PWM_L = 0 ;
57+ PWM_R = speed ;
58+ break ;
59+ /*****right*****/
60+ case 3 :
61+ PMOD_F -> gpio_write (0x30000000 ,L298N_F_MASK );
62+ PMOD_H -> gpio_write (0x00000000 ,L298N_H_MASK );
63+
64+ PMOD_L -> gpio_write (0x40000000 ,L298N_L_MASK );
65+ PWM_L = speed ;
66+ PWM_R = 0 ;
67+ break ;
68+ /*****speed up*****/
69+ case 4 :
70+ if (speed < 9 ) {
71+ speed = speed + 1 ;
72+ PWM_L = speed ;
73+ PWM_R = speed ;
74+ }
75+ break ;
76+ /*****speed down*****/
77+ case 5 :
78+ if (speed > 0 ) {
79+ speed = speed - 1 ;
80+ PWM_L = speed ;
81+ PWM_R = speed ;
82+ }
83+ break ;
84+ /*****backward*****/
85+ case 6 :
86+ PMOD_F -> gpio_write (0x00000000 ,L298N_F_MASK );
87+ PMOD_H -> gpio_write (0xC0000000 ,L298N_H_MASK );
88+ PWM_L = speed ;
89+ PWM_R = speed ;
90+ break ;
91+ }
92+ }
0 commit comments