ad0x0_timman.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "ad0x0_timman.h"
  2. #include "main.h"
  3. #include <string.h>
  4. //#include "ad0x0_spi.h"
  5. ad0x0_timman_s ad0x0_timmans[AD0X0_TIMMAN_QCOUNT];
  6. void ad0x0_timman_init(void){
  7. for(int16_t i=0;i<AD0X0_TIMMAN_QCOUNT;i++){
  8. ad0x0_timmans[i].time_cur_ms=ad0x0_timmans[i].time_init_ms=0;
  9. ad0x0_timmans[i].p_func=NULL;
  10. }
  11. TIM4->CR1|=TIM_CR1_CEN;
  12. }
  13. void ad0x0_timman_remove(uint8_t (*p_func)(void)){
  14. /*бля ну да, проверка на переполнение нужна...*/
  15. //ищем эл-т с неприсвоенной функцией и считаем, что это свободный
  16. ad0x0_timman_s *p=ad0x0_timmans;
  17. uint8_t c=AD0X0_TIMMAN_QCOUNT;
  18. int was_masked=__disable_irq();
  19. if(was_masked){
  20. __ASM("nop");
  21. }
  22. while(c--){
  23. if(p->p_func==p_func){
  24. p->p_func=NULL;
  25. if(!was_masked)__enable_irq();
  26. return;
  27. }
  28. p++;
  29. }
  30. //переполнение!!!!!!!!!!!!!!!! тут надо точку останова
  31. __enable_irq();
  32. }
  33. void ad0x0_timman_add(int16_t _ms,uint8_t (*_p_func)(void)){
  34. /*бля ну да, проверка на переполнение нужна...*/
  35. //ищем эл-т с неприсвоенной функцией и считаем, что это свободный
  36. ad0x0_timman_s *p=ad0x0_timmans;
  37. uint8_t c=AD0X0_TIMMAN_QCOUNT;
  38. int was_masked=__disable_irq();
  39. if(was_masked){
  40. __ASM("nop");
  41. }
  42. while(c--){
  43. if(!p->p_func){
  44. p->time_cur_ms=p->time_init_ms=_ms;
  45. p->p_func=_p_func;
  46. if(!was_masked)__enable_irq();
  47. return;
  48. }
  49. p++;
  50. }
  51. //переполнение!!!!!!!!!!!!!!!! тут надо точку останова
  52. __enable_irq();
  53. }
  54. void ad0x0_timman_tickms(void){
  55. //ADINT_HIGH;
  56. ad0x0_timman_s *p=ad0x0_timmans;
  57. uint8_t c=AD0X0_TIMMAN_QCOUNT;
  58. while(c--){
  59. if(p->p_func){
  60. if(!(p->time_cur_ms--)){
  61. if(p->p_func())p->p_func=NULL;
  62. p->time_cur_ms=p->time_init_ms;
  63. }
  64. }
  65. p++;
  66. }
  67. //ADINT_LOW;
  68. }