app_adas.c 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. #include "common.h"
  2. #include "drv_adas.h"
  3. #include "drv_can.h"
  4. #include "app_rs485_1.h"
  5. #include "app_rs485_2.h"
  6. #include "app_can.h"
  7. #include "app.h"
  8. #include "app_adas.h"
  9. uint16_t array_juli_1[ADAS_ARRAY_JU_LI_MAX];
  10. uint16_t array_juli_1_index = 0;
  11. uint16_t array_juli_2[ADAS_ARRAY_JU_LI_MAX];
  12. uint16_t array_juli_2_index = 0;
  13. DELAY_COMMON adas_delay;
  14. uint8_t adas_receive_stag = ADAS_RECEIVE_0;
  15. uint16_t ju_li_1 = 0xFFFF;
  16. uint16_t ju_li_2 = 0xFFFF;
  17. uint8_t current_pwm_no = ADAS_PWM_0;
  18. void Sort(uint16_t *arr,uint16_t size)
  19. {
  20. uint16_t i,j,tmp;
  21. for(i = 0; i < size - 1;i++)
  22. {
  23. for(j = 0; j < size - i - 1;j++)
  24. {
  25. if(arr[j] > arr[j+1])
  26. {
  27. tmp = arr[j];
  28. arr[j] = arr[j+1];
  29. arr[j+1] = tmp;
  30. }
  31. }
  32. }
  33. }
  34. void ADAS_Measure_Finish_Ju_Li_1(void)
  35. {
  36. Sort(array_juli_1,ADAS_ARRAY_JU_LI_MAX);
  37. ju_li_1 = array_juli_1[ADAS_ARRAY_JU_LI_MAX>>1];
  38. }
  39. void ADAS_Measure_Finish_Ju_Li_2(void)
  40. {
  41. Sort(array_juli_2,ADAS_ARRAY_JU_LI_MAX);
  42. ju_li_2 = array_juli_2[ADAS_ARRAY_JU_LI_MAX>>1];
  43. }
  44. void ADAS_Measure_Ju_Li_1(void)
  45. {
  46. uint32_t time;
  47. uint16_t temp_juli = 0;
  48. if(current_pwm_no != ADAS_PWM_1)
  49. return;
  50. if(gpio_input_bit_get(GPIOC,GPIO_PIN_8) == 1&&adas_receive_stag == ADAS_RECEIVE_1)
  51. {
  52. time = timer_counter_read(TIMER0);
  53. if(time > ADAS_PWM_SENDING_MAX_TIME)
  54. {
  55. //<30CM
  56. temp_juli = ADAS_JU_LI_JING;
  57. adas_receive_stag = ADAS_RECEIVE_0;
  58. current_pwm_no = ADAS_PWM_0;
  59. timer_disable(TIMER0);
  60. }
  61. else
  62. adas_receive_stag = ADAS_RECEIVE_2;
  63. }
  64. else if(gpio_input_bit_get(GPIOC,GPIO_PIN_8) == 0&&adas_receive_stag == ADAS_RECEIVE_2)
  65. {
  66. time = timer_counter_read(TIMER0);
  67. time >>= 1;
  68. temp_juli = (uint16_t)((double)time*YIN_SU/10);
  69. adas_receive_stag = ADAS_RECEIVE_0;
  70. current_pwm_no = ADAS_PWM_0;
  71. timer_disable(TIMER0);
  72. }
  73. //
  74. if(adas_receive_stag == ADAS_RECEIVE_0)
  75. {
  76. array_juli_1[array_juli_1_index++] = temp_juli;
  77. if(array_juli_1_index >= ADAS_ARRAY_JU_LI_MAX)
  78. {
  79. array_juli_1_index = 0;
  80. g_event |= ADAS_MEAS_1_FINISH_EVENT;
  81. }
  82. }
  83. }
  84. void ADAS_Measure_Ju_Li_2(void)
  85. {
  86. uint32_t time;
  87. uint16_t temp_juli = 0;
  88. if(current_pwm_no != ADAS_PWM_2)
  89. return;
  90. if(gpio_input_bit_get(GPIOC,GPIO_PIN_9) == 1&&adas_receive_stag == ADAS_RECEIVE_1)
  91. {
  92. time = timer_counter_read(TIMER0);
  93. if(time > ADAS_PWM_SENDING_MAX_TIME)
  94. {
  95. //<30CM
  96. temp_juli = ADAS_JU_LI_JING;
  97. adas_receive_stag = ADAS_RECEIVE_0;
  98. current_pwm_no = ADAS_PWM_0;
  99. timer_disable(TIMER0);
  100. }
  101. else
  102. adas_receive_stag = ADAS_RECEIVE_2;
  103. }
  104. else if(gpio_input_bit_get(GPIOC,GPIO_PIN_9) == 0&&adas_receive_stag == ADAS_RECEIVE_2)
  105. {
  106. time = timer_counter_read(TIMER0);
  107. time >>= 1;
  108. temp_juli = (uint16_t)((double)time*YIN_SU/10);
  109. adas_receive_stag = ADAS_RECEIVE_0;
  110. current_pwm_no = ADAS_PWM_0;
  111. timer_disable(TIMER0);
  112. }
  113. //
  114. if(adas_receive_stag == ADAS_RECEIVE_0)
  115. {
  116. array_juli_2[array_juli_2_index++] = temp_juli;
  117. if(array_juli_2_index >= ADAS_ARRAY_JU_LI_MAX)
  118. {
  119. array_juli_2_index = 0;
  120. g_event |= ADAS_MEAS_2_FINISH_EVENT;
  121. }
  122. }
  123. }
  124. void ADAS_PWM_1_Enable(void)
  125. {
  126. timer_disable(TIMER1);
  127. ADAS_PWM_Initial(ADAS_PWM_1);
  128. timer_enable(TIMER2);
  129. timer_enable(TIMER0);
  130. timer_counter_value_config(TIMER0,0);
  131. adas_receive_stag = ADAS_RECEIVE_1;
  132. //ju_li_1 = 0;
  133. current_pwm_no = ADAS_PWM_1;
  134. }
  135. void ADAS_PWM_2_Enable(void)
  136. {
  137. timer_disable(TIMER1);
  138. ADAS_PWM_Initial(ADAS_PWM_2);
  139. timer_enable(TIMER2);
  140. timer_enable(TIMER0);
  141. timer_counter_value_config(TIMER0,0);
  142. adas_receive_stag = ADAS_RECEIVE_1;
  143. //ju_li_2 = 0;
  144. current_pwm_no = ADAS_PWM_2;
  145. }
  146. void ADAS_Timeout(void)
  147. {
  148. if(adas_delay.set)
  149. {
  150. ++adas_delay.count;
  151. if(adas_delay.count >= ADAS_ZONG_TIME)
  152. {
  153. g_event |= ADAS_PWM_1_TIMEOUT_EVENT;
  154. adas_delay.count = 0;
  155. }
  156. else if(adas_delay.count == ADAS_LIANG_TIME)
  157. {
  158. g_event |= ADAS_PWM_2_TIMEOUT_EVENT;
  159. }
  160. }
  161. }
  162. void ADAS_Enable(uint8_t enable)
  163. {
  164. if(enable)
  165. {
  166. adas_delay.set = 1;
  167. adas_delay.count = ADAS_ZONG_TIME;
  168. }
  169. else
  170. {
  171. adas_delay.set = 0;
  172. adas_delay.count = 0;
  173. }
  174. }
  175. void ADAS_Initial(void)
  176. {
  177. ADAS_Drv_Initial();
  178. ADAS_Enable(0);
  179. }
  180. void Can_ADAS_Self_Send(CAN_FRAME*can_adas_frame)
  181. {
  182. uint16_t len;
  183. uint8_t *buf = can_adas_frame->data;
  184. len = 0;
  185. buf[len++] = (uint8_t)(KEY_ADAS_SELF_UP >> 0);
  186. buf[len++] = (uint8_t)(KEY_ADAS_SELF_UP >> 8);
  187. buf[len++] = (uint8_t)(ju_li_1 >> 0);
  188. buf[len++] = (uint8_t)(ju_li_1 >> 8);
  189. buf[len++] = (uint8_t)(ju_li_2 >> 0);
  190. buf[len++] = (uint8_t)(ju_li_2 >> 8);
  191. //
  192. can_adas_frame->head.rsp = FRAME_PT_NO_RSP;
  193. can_adas_frame->head.dest = CTR_ID;
  194. can_adas_frame->head.sour = SELF_ID;
  195. can_adas_frame->head.index = 1;
  196. can_adas_frame->head.total = (len - 1)/8 + 1;
  197. can_adas_frame->head.pro =FRAME_PRO_D;
  198. //
  199. can_adas_frame->len = len;
  200. //
  201. if(!Send_Data_Can(can_adas_frame,ADAS_SELF))
  202. {
  203. //g_event |= ADAS_RESEND_CMD_EVENT;
  204. //return 0;
  205. }
  206. }
  207. int8_t Handle_Can_Adas_CMD(CAN_FRAME*can_adas_frame)
  208. {
  209. uint16_t key;
  210. uint8_t *buf = can_adas_frame->data;
  211. memcpy(&key,can_adas_frame->data,sizeof(key));
  212. switch(key)
  213. {
  214. case KEY_ADAS_COMMON:
  215. break;
  216. case KEY_ADAS_ENABLE:
  217. switch(buf[2])
  218. {
  219. case 0:
  220. ADAS_Enable(0);
  221. break;
  222. case 1:
  223. ADAS_Enable(1);
  224. break;
  225. default:
  226. return 0;
  227. }
  228. break;
  229. case KEY_ADAS_SELF_UP:
  230. return 0;
  231. default:
  232. return 0;
  233. }
  234. return 1;
  235. }
  236. int8_t Rsp_Can_Adas_CMD(CAN_FRAME*can_adas_frame)
  237. {
  238. uint16_t key,len;
  239. uint8_t *buf = can_adas_frame->data;
  240. memcpy(&key,can_adas_frame->data,sizeof(key));
  241. switch(key)
  242. {
  243. case KEY_ADAS_COMMON:
  244. if((can_adas_frame->head.rsp != FRAME_PT_NEED_RSP))
  245. return 1;
  246. len = 0;
  247. buf[len++] = (uint8_t)(KEY_ADAS_COMMON >> 0);
  248. buf[len++] = (uint8_t)(KEY_ADAS_COMMON >> 8);
  249. buf[len++] = 0;
  250. buf[len++] = adas_delay.set;
  251. buf[len++] = (uint8_t)(ju_li_1 >> 0);
  252. buf[len++] = (uint8_t)(ju_li_1 >> 8);
  253. buf[len++] = (uint8_t)(ju_li_2 >> 0);
  254. buf[len++] = (uint8_t)(ju_li_2 >> 8);
  255. break;
  256. case KEY_ADAS_ENABLE:
  257. if((can_adas_frame->head.rsp != FRAME_PT_NEED_RSP))
  258. return 1;
  259. len = 0;
  260. buf[len++] = (uint8_t)(KEY_ADAS_ENABLE >> 0);
  261. buf[len++] = (uint8_t)(KEY_ADAS_ENABLE >> 8);
  262. buf[len++] = 0;
  263. buf[len++] = adas_delay.set;
  264. break;
  265. case KEY_ADAS_SELF_UP:
  266. return 0;
  267. default:
  268. return 0;
  269. }
  270. //
  271. can_adas_frame->head.rsp = FRAME_PT_RSP;
  272. can_adas_frame->head.dest = can_adas_frame->head.sour;
  273. can_adas_frame->head.sour = SELF_ID;
  274. can_adas_frame->head.index = 1;
  275. can_adas_frame->head.total = (len - 1)/8 + 1;
  276. can_adas_frame->head.pro =FRAME_PRO_D;
  277. //
  278. can_adas_frame->len = len;
  279. //
  280. if(!Send_Data_Can(can_adas_frame,ADAS_RSP))
  281. {
  282. g_event |= ADAS_RESEND_CMD_EVENT;
  283. return 0;
  284. }
  285. return 1;
  286. }