hal_module_adapter.c 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529
  1. #include "bsp.h"
  2. #include "osasys.h"
  3. #include "ostask.h"
  4. #include "queue.h"
  5. #include "debug_log.h"
  6. #include "slpman_ec616.h"
  7. #include "plat_config.h"
  8. #include "hal_uart.h"
  9. #include "hal_adc.h"
  10. #include "adc_ec616.h"
  11. #include "gpio_ec616.h"
  12. #include "hal_module_adapter.h"
  13. #include <stdarg.h>
  14. /*
  15. gps
  16. */
  17. static posGGACallBack gGPSDataCBfunc =NULL;
  18. // GSENSOR device addr
  19. #define GSENSOR_DEVICE_ADDR (SC7A20_IIC_ADDRESS)
  20. #define ZM01_DEVICE_ADDR (0x2a)
  21. /*
  22. i2c
  23. */
  24. #define HAL_I2C_RECV_TASK_QUEUE_CREATED (0x1)
  25. #define I2C_RECV_QUEUE_BUF_SIZE (0x10)
  26. #define I2C_RECV_TASK_STACK_SIZE (1536)
  27. /*
  28. power control
  29. */
  30. // back power
  31. #define AON_GPS_POWER1 (8)
  32. //main power
  33. #define AON_GPS_POWER2 (4)
  34. #define AON_RELAY_DRV (5)
  35. #define AON_WAKEUP (8)
  36. #define GPIO_MOS_DRV1 (14)
  37. #define GPIO_MOS_DRV2 (15)
  38. #define GPIO_POWER_LED (9)
  39. /*GPS*/
  40. #define FEM_GPS_RSTN (6)
  41. #define FEM_GPS_BLK (7)
  42. #define FEM_GPS_PPS (9)
  43. /*CAN*/
  44. #define GPIO_CAN_POWER (9)
  45. /*
  46. I2C
  47. */
  48. #define I2C_RECV_CONTROL_FLAG (0x1)
  49. static UINT32 g_halI2CInitFlag = 0;
  50. static osEventFlagsId_t g_i2CRecvFlag;
  51. static StaticQueue_t i2c_recv_queue_cb;
  52. static StaticTask_t i2c_recv_task;
  53. static UINT8 i2c_recv_task_stack[I2C_RECV_TASK_STACK_SIZE];
  54. static UINT8 i2c_recv_queue_buf[I2C_RECV_QUEUE_BUF_SIZE*sizeof(i2c_recv_msgqueue_obj_t)];
  55. // message queue id
  56. static osMessageQueueId_t i2c_recv_msgqueue;
  57. /*
  58. adc
  59. */
  60. #define GPIO_AIO3_SEL (19)
  61. #define GPIO_AIO4_SEL (18)
  62. #define ADC_TASK_STACK_SIZE (512)
  63. #define ADC_MSG_MAX_NUM (7)
  64. #define ADC_AioResDivRatioDefault (ADC_AioResDivRatio14Over16)
  65. #define REV_AioResDivRatioDefault 16/14
  66. //#define ADC_ChannelAioVbat (1200)
  67. static UINT32 ADC_ChannelAioVbat=1200;
  68. #define ADC_ChannelAioRes (15000)
  69. #define NTC_FullAioValue (1200)
  70. #define ADC_AioResDivRatioExtra (ADC_AioResDivRatio8Over16)
  71. #define REV_AioResDivRatioExtra 16/8
  72. #define NTC_REQ_UPDATE_DATA (0x01)
  73. #define ADC_MSG_TIMEOUT (1000)
  74. #define ADC_CALIBRATION_VALUE (50900)
  75. static UINT32 ADC_InsideRES=500000;
  76. #define ADC_RECV_CONTROL_FLAG (0x1)
  77. typedef struct
  78. {
  79. UINT32 request;
  80. UINT32 NTCvalue[7];
  81. }NtcResult_t;
  82. NtcResult_t gNtcDev;
  83. volatile static UINT32 vbatChannelResult = 0;
  84. volatile static UINT32 thermalChannelResult = 0;
  85. volatile static UINT32 NTCChannelResult[NTC_ChannelMax];
  86. QueueHandle_t adcMsgHandle = NULL;
  87. static osEventFlagsId_t adcEvtHandle = NULL;
  88. static osEventFlagsId_t adcTrigerHandle = NULL;
  89. static osThreadId_t adcTaskHandle = NULL;
  90. static StaticTask_t adcTask = NULL;
  91. static UINT8 adcTaskStack[ADC_TASK_STACK_SIZE];
  92. /*
  93. gps
  94. */
  95. static QueueHandle_t gpsHandle = NULL;
  96. /*
  97. can
  98. */
  99. static osMessageQueueId_t can_recv_msgqueue;
  100. static StaticQueue_t can_recv_queue_cb;
  101. #define CAN_RECV_QUEUE_BUF_SIZE (0x10)
  102. static UINT8 can_recv_queue_buf[CAN_RECV_QUEUE_BUF_SIZE];
  103. #define CAN_RECV_CONTROL_FLAG (0x1)
  104. //#define SPI_ANALOG
  105. #ifdef SPI_ANALOG
  106. #define USING_SPI0 0
  107. #endif
  108. /*spi0*/
  109. #ifdef SPI_ANALOG
  110. #if USING_SPI0
  111. #define SPI_SSN_GPIO_INSTANCE RTE_SPI0_SSN_GPIO_INSTANCE
  112. #define SPI_SSN_GPIO_INDEX RTE_SPI0_SSN_GPIO_INDEX
  113. #define SPI_SSN_GPIO_PAD_ADDR 21
  114. #define SPI_CLK_GPIO_INSTANCE 0
  115. #define SPI_CLK_GPIO_INDEX 15
  116. #define SPI_CLK_GPIO_PAD_ADDR 24
  117. #define SPI_MOSI_GPIO_INSTANCE 0
  118. #define SPI_MOSI_GPIO_INDEX 11
  119. #define SPI_MOSI_GPIO_PAD_ADDR 22
  120. #define SPI_MISO_GPIO_INSTANCE 0
  121. #define SPI_MISO_GPIO_INDEX 14
  122. #define SPI_MISO_GPIO_PAD_ADDR 23
  123. #else //SPI1
  124. #define SPI_SSN_GPIO_INSTANCE RTE_SPI1_SSN_GPIO_INSTANCE
  125. #define SPI_SSN_GPIO_INDEX RTE_SPI1_SSN_GPIO_INDEX
  126. #define SPI_SSN_GPIO_PAD_ADDR 13
  127. #define SPI_CLK_GPIO_INSTANCE 0
  128. #define SPI_CLK_GPIO_INDEX 5
  129. #define SPI_CLK_GPIO_PAD_ADDR 16
  130. #define SPI_MOSI_GPIO_INSTANCE 0
  131. #define SPI_MOSI_GPIO_INDEX 3
  132. #define SPI_MOSI_GPIO_PAD_ADDR 14
  133. #define SPI_MISO_GPIO_INSTANCE 0
  134. #define SPI_MISO_GPIO_INDEX 4
  135. #define SPI_MISO_GPIO_PAD_ADDR 15
  136. #endif
  137. #else
  138. #define SPI_SSN_GPIO_INSTANCE RTE_SPI1_SSN_GPIO_INSTANCE
  139. #define SPI_SSN_GPIO_INDEX RTE_SPI1_SSN_GPIO_INDEX
  140. #endif
  141. extern ARM_DRIVER_I2C Driver_I2C0;
  142. extern ARM_DRIVER_SPI Driver_SPI0;
  143. extern ARM_DRIVER_SPI Driver_SPI1;
  144. extern ARM_DRIVER_USART Driver_USART2;
  145. extern ARM_DRIVER_USART Driver_USART1;
  146. uint8_t gps_uart_recv_buf[GPS_DATA_RECV_BUFFER_SIZE];
  147. static ARM_DRIVER_SPI *spiMasterDrv = &CREATE_SYMBOL(Driver_SPI, 1);
  148. static ARM_DRIVER_I2C *i2cDrvInstance = &CREATE_SYMBOL(Driver_I2C, 0);
  149. static ARM_DRIVER_USART *usartHandle = &CREATE_SYMBOL(Driver_USART, 2);
  150. static ARM_DRIVER_USART *printfHandle = &CREATE_SYMBOL(Driver_USART, 1);
  151. //LED define pin index
  152. #define LED_INX_MAX (5)
  153. #define LED_PORT_0 (0)
  154. #define LED_PORT_1 (1)
  155. /*
  156. pin1~pin4 for soc display
  157. pin5 for fault display
  158. */
  159. #define LED_GPIO_PIN_1 (6)
  160. #define LED_PAD_INDEX1 (17)
  161. #define LED_GPIO_PIN_2 (7)
  162. #define LED_PAD_INDEX2 (18)
  163. #define LED_GPIO_PIN_3 (0)
  164. #define LED_PAD_INDEX3 (21)
  165. #define LED_GPIO_PIN_4 (11)
  166. #define LED_PAD_INDEX4 (22)
  167. #define LED_GPIO_PIN_5 (1)
  168. #define LED_PAD_INDEX5 (27)
  169. led_pin_config_t gLedCfg[LED_INX_MAX]={{LED_PORT_0,LED_GPIO_PIN_1,LED_PAD_INDEX1, PAD_MuxAlt0},\
  170. {LED_PORT_0,LED_GPIO_PIN_2,LED_PAD_INDEX2, PAD_MuxAlt0},\
  171. {LED_PORT_1,LED_GPIO_PIN_3,LED_PAD_INDEX3, PAD_MuxAlt0},\
  172. {LED_PORT_0,LED_GPIO_PIN_4,LED_PAD_INDEX4, PAD_MuxAlt0},\
  173. {LED_PORT_1,LED_GPIO_PIN_5,LED_PAD_INDEX5, PAD_MuxAlt0}};
  174. void UTCToBeijing(UTC8TimeType* UTC8Time,unsigned int UTCyear,unsigned char UTCmonth,unsigned char UTCday,unsigned int UTChour,unsigned char UTCminute,unsigned char UTCsecond)
  175. {
  176. int year=0,month=0,day=0,hour=0;
  177. int lastday = 0;// ÔµÄ×îºóÒ»ÌìÈÕÆÚ
  178. int lastlastday = 0;//ÉÏÔµÄ×îºóÒ»ÌìÈÕÆÚ
  179. year=UTCyear;
  180. month=UTCmonth;
  181. day=UTCday;
  182. hour=UTChour+8;//UTC+8ת»»Îª±±¾©Ê±¼ä
  183. if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
  184. {
  185. lastday = 31;
  186. if(month == 3)
  187. {
  188. if((year%400 == 0)||(year%4 == 0 && year%100 != 0))//ÅжÏÊÇ·ñΪÈòÄê
  189. lastlastday = 29;//ÈòÄêµÄ2ÔÂΪ29Ì죬ƽÄêΪ28Ìì
  190. else
  191. lastlastday = 28;
  192. }
  193. if(month == 8)
  194. lastlastday = 31;
  195. }
  196. else
  197. if(month == 4 || month == 6 || month == 9 || month == 11)
  198. {
  199. lastday = 30;
  200. lastlastday = 31;
  201. }
  202. else
  203. {
  204. lastlastday = 31;
  205. if((year%400 == 0)||(year%4 == 0 && year%100 != 0))//ÈòÄêµÄ2ÔÂΪ29Ì죬ƽÄêΪ28Ìì
  206. lastday = 29;
  207. else
  208. lastday = 28;
  209. }
  210. if(hour >= 24)//µ±Ëã³öµÄʱ´óÓÚ»òµÈÓÚ24£º00ʱ£¬Ó¦¼õÈ¥24£º00£¬ÈÕÆÚ¼ÓÒ»Ìì
  211. {
  212. hour -= 24;
  213. day += 1;
  214. if(day > lastday)//µ±Ëã³öµÄÈÕÆÚ´óÓÚ¸ÃÔÂ×îºóÒ»Ììʱ£¬Ó¦¼õÈ¥¸ÃÔÂ×îºóÒ»ÌìµÄÈÕÆÚ£¬Ô·ݼÓÉÏÒ»¸öÔÂ
  215. {
  216. day -= lastday;
  217. month += 1;
  218. if(month > 12)//µ±Ëã³öµÄÔ·ݴóÓÚ12£¬Ó¦¼õÈ¥12£¬Äê·Ý¼ÓÉÏ1Äê
  219. {
  220. month -= 12;
  221. year += 1;
  222. }
  223. }
  224. }
  225. UTC8Time->year = year;
  226. UTC8Time->month = month;
  227. UTC8Time->day = day;
  228. UTC8Time->hour = hour;
  229. UTC8Time->minute = UTCminute;
  230. UTC8Time->second = UTCsecond;
  231. }
  232. #include <stdarg.h>
  233. #ifdef DEBUGLOG
  234. static osMutexId_t DebugFileMux;
  235. static void Debug_Write_Logfile(UINT8 * buf)
  236. {
  237. UINT32 Count;
  238. OSAFILE file;
  239. osMutexAcquire(DebugFileMux, osWaitForever);
  240. file = OsaFopen("DebugFile","wb");
  241. if(file!=NULL)
  242. {
  243. if(OsaFseek(file, 0, SEEK_END) == 0)
  244. {
  245. Count = OsaFwrite(buf, 1, strlen(buf), file);
  246. }
  247. OsaFclose(file);
  248. }
  249. osMutexRelease(DebugFileMux);
  250. return;
  251. }
  252. void Debug_printf(const UINT8 *format, ...)
  253. {
  254. UINT8 buf[128+1];
  255. va_list args;
  256. OsaUtcTimeTValue timeUtc;
  257. UINT16 year;
  258. UINT8 month,day,hour,minute,sec;
  259. appGetSystemTimeUtcSync(&timeUtc);
  260. year=(timeUtc.UTCtimer1&0xffff0000)>>16;
  261. month=(timeUtc.UTCtimer1&0xff00)>>8;
  262. day=timeUtc.UTCtimer1&0xff;
  263. hour=(timeUtc.UTCtimer2&0xff000000)>>24;
  264. minute=(timeUtc.UTCtimer2&0xff0000)>>16;
  265. sec=(timeUtc.UTCtimer2&0xff00)>>8;
  266. memset(buf,0,128+1);
  267. UTC8TimeType UTC8TimeStruct;
  268. UTCToBeijing((UTC8TimeType *)&UTC8TimeStruct,year,month,day,hour,minute,sec);
  269. sprintf((char *)buf,"%02d-%02d %02d:%02d:%02d ",UTC8TimeStruct.month,UTC8TimeStruct.day,UTC8TimeStruct.hour,UTC8TimeStruct.minute,UTC8TimeStruct.second);
  270. va_start(args, format);
  271. vsnprintf(buf+strlen(buf), 128-strlen(buf), format, args);
  272. va_end(args);
  273. Debug_Write_Logfile(buf);
  274. }
  275. UINT16 Debug_GetSize()
  276. {
  277. UINT16 FileSize;
  278. OSAFILE file;
  279. osMutexAcquire(DebugFileMux, osWaitForever);
  280. file = OsaFopen("DebugFile","rb");
  281. FileSize = OsaFsize(file);
  282. OsaFclose(file);
  283. osMutexRelease(DebugFileMux);
  284. return FileSize;
  285. }
  286. void Debug_Read_Logfile(UINT8 * rbuf,UINT16 FileSize)
  287. {
  288. UINT32 Count;
  289. OSAFILE file;
  290. printf("%s start\r\n",__FUNCTION__);
  291. osMutexAcquire(DebugFileMux, osWaitForever);
  292. file = OsaFopen("DebugFile","rb");
  293. if(file!=NULL)
  294. {
  295. if(OsaFseek(file, 0, SEEK_SET) == 0)
  296. {
  297. memset(rbuf,0,FileSize);
  298. Count = OsaFread(rbuf, 1, FileSize, file);
  299. printf("%s",rbuf);
  300. }
  301. OsaFclose(file);
  302. }
  303. printf("%s end! \r\n",__FUNCTION__);
  304. osMutexRelease(DebugFileMux);
  305. return;
  306. }
  307. void Debug_Del_Logfile(void)
  308. {
  309. osMutexAcquire(DebugFileMux, osWaitForever);
  310. OsaFremove("DebugFile");
  311. osMutexRelease(DebugFileMux);
  312. }
  313. #endif
  314. #ifdef BL_FILE_LOG
  315. static UINT8 blLogFileNux=0;
  316. static void bluejoy_write_logfile(UINT8 * buf)
  317. {
  318. int32_t err;
  319. UINT32 Count;
  320. OSAFILE file;
  321. while(blLogFileNux){
  322. osDelay(10/portTICK_PERIOD_MS);
  323. }
  324. blLogFileNux=1;
  325. file = OsaFopen("blLog","wb");
  326. if(file==NULL){
  327. //printf("blLog open fail!\r\n");
  328. blLogFileNux=0;
  329. return;
  330. }
  331. if(OsaFseek(file, 0, SEEK_END) != 0)
  332. {
  333. //printf("Seek file failed [%d] \r\n",__LINE__);
  334. OsaFclose(file);
  335. blLogFileNux=0;
  336. return;
  337. }
  338. Count = OsaFwrite(buf, 1, strlen(buf), file);
  339. if(Count != (strlen(buf))){
  340. //printf("blLog write fail!\r\n");
  341. }
  342. OsaFclose(file);
  343. blLogFileNux=0;
  344. }
  345. void bluejoy_read_logfile(void)
  346. {
  347. int32_t err;
  348. UINT32 Count;
  349. OSAFILE file;
  350. UINT8 rbuf[128+1]={0};
  351. UINT8 * flag_p;
  352. UINT16 pri_l;
  353. printf("%s start\r\n",__FUNCTION__);
  354. while(blLogFileNux){
  355. osDelay(10/portTICK_PERIOD_MS);
  356. }
  357. blLogFileNux=1;
  358. file = OsaFopen("blLog","rb");
  359. if(file==NULL){
  360. printf("blLog not exst!\r\n");
  361. blLogFileNux=0;
  362. return;
  363. }
  364. if(OsaFseek(file, 0, SEEK_SET) != 0)
  365. {
  366. printf("Seek file failed [%d] \r\n",__LINE__);
  367. OsaFclose(file);
  368. blLogFileNux=0;
  369. return;
  370. }
  371. do{
  372. memset(rbuf,0,128);
  373. Count = OsaFread(rbuf, 1, 128, file);
  374. printf("%s",rbuf);
  375. }while(Count==128);
  376. OsaFclose(file);
  377. blLogFileNux=0;
  378. printf("%s end! \r\n",__FUNCTION__);
  379. }
  380. void bluejoy_del_logfile(void)
  381. {
  382. UINT32 ret;
  383. //printf("%s start! \r\n",__FUNCTION__);
  384. while(blLogFileNux){
  385. osDelay(10/portTICK_PERIOD_MS);
  386. }
  387. blLogFileNux=1;
  388. OsaFremove("blLog");
  389. blLogFileNux=0;
  390. FaultDisplay(LED_TURN_OFF);
  391. osDelay(1000/portTICK_PERIOD_MS);
  392. FaultDisplay(LED_TURN_ON);
  393. osDelay(1000/portTICK_PERIOD_MS);
  394. FaultDisplay(LED_TURN_OFF);
  395. osDelay(1000/portTICK_PERIOD_MS);
  396. FaultDisplay(LED_TURN_ON);
  397. }
  398. void bluejoy_printf(BlLogLevel level, const UINT8 *format, ...)
  399. {
  400. UINT8 buf[128+1];
  401. va_list args;
  402. OsaUtcTimeTValue timeUtc;
  403. UINT16 year;
  404. UINT8 month,day,hour,minite,sec;
  405. if(level<BL_LEVEL2)
  406. return;
  407. appGetSystemTimeUtcSync(&timeUtc);
  408. year=(timeUtc.UTCtimer1&0xffff0000)>>16;
  409. month=(timeUtc.UTCtimer1&0xff00)>>8;
  410. day=timeUtc.UTCtimer1&0xff;
  411. hour=(timeUtc.UTCtimer2&0xff000000)>>24;
  412. minite=(timeUtc.UTCtimer2&0xff0000)>>16;
  413. sec=(timeUtc.UTCtimer2&0xff00)>>8;
  414. memset(buf,0,128+1);
  415. UTC8TimeType UTC8TimeStruct;
  416. UTCToBeijing(UTC8TimeStruct,year,month,day,hour,minite,sec);
  417. sprintf((char *)buf,"%04d-%02d-%02d %02d:%02d:%02d ",UTC8TimeStruct.year,UTC8TimeStruct.month,UTC8TimeStruct.day,UTC8TimeStruct.hour,UTC8TimeStruct.minute,UTC8TimeStruct.second);
  418. va_start(args, format);
  419. vsnprintf(buf+strlen(buf), 128-strlen(buf), format, args);
  420. va_end(args);
  421. //printf("%s", buf);
  422. bluejoy_write_logfile(buf);
  423. }
  424. #endif
  425. #if 0
  426. /**
  427. \fn void NetSocDisplay(UINT8 soc)
  428. \param[in] void
  429. \brief RSSI display on led
  430. \return
  431. */
  432. #define RSSI_LEVEL_0 (0)
  433. #define RSSI_LEVEL_10 (10)
  434. #define RSSI_LEVEL_20 (20)
  435. #define RSSI_LEVEL_25 (25)
  436. #define RSSI_LEVEL_30 (30)
  437. void NetSocDisplay(UINT8 soc)
  438. {
  439. UINT16 pinLevel[LED_INX_MAX-1] ={0};
  440. gpio_pin_config_t nGpioCfg={0};
  441. nGpioCfg.pinDirection = GPIO_DirectionOutput;
  442. nGpioCfg.misc.initOutput = 1;
  443. for(int8_t i=0;i< LED_INX_MAX-1;i++){
  444. GPIO_PinConfig(gLedCfg[i].pinPort, gLedCfg[i].pinInx, &nGpioCfg);
  445. }
  446. if(RSSI_LEVEL_0 < soc && soc <=RSSI_LEVEL_10)
  447. {
  448. pinLevel[0]=1;
  449. pinLevel[1]=pinLevel[2]=pinLevel[3]=0;
  450. }
  451. else if(RSSI_LEVEL_10 < soc && soc <=RSSI_LEVEL_20)
  452. {
  453. pinLevel[0]=pinLevel[1]=1;
  454. pinLevel[2]=pinLevel[3]=0;
  455. }
  456. else if(RSSI_LEVEL_20 < soc && soc <=RSSI_LEVEL_25)
  457. {
  458. pinLevel[0]=pinLevel[1]=pinLevel[2]=1;
  459. pinLevel[3]=0;
  460. }
  461. else if(RSSI_LEVEL_25 < soc && soc <=RSSI_LEVEL_30)
  462. {
  463. pinLevel[0]=pinLevel[1]=pinLevel[2]=pinLevel[3]=1;
  464. }
  465. for(UINT8 i=0; i<LED_INX_MAX-1; i++)
  466. {
  467. GPIO_PinWrite(gLedCfg[i].pinPort, 1<<gLedCfg[i].pinInx, pinLevel[i]<<gLedCfg[i].pinInx);
  468. }
  469. }
  470. #endif
  471. void NetSocDisplay(ledInx_t Inx , ledStaus_t level)
  472. {
  473. UINT16 pinLevel[LED_INX_MAX-1] ={0};
  474. gpio_pin_config_t nGpioCfg={0};
  475. nGpioCfg.pinDirection = GPIO_DirectionOutput;
  476. nGpioCfg.misc.initOutput = 1;
  477. pad_config_t padConfig;
  478. PAD_GetDefaultConfig(&padConfig);
  479. padConfig.mux = gLedCfg[Inx].padMutex;
  480. PAD_SetPinConfig(gLedCfg[Inx].padInx, &padConfig);
  481. PAD_SetPinPullConfig(gLedCfg[Inx].padInx, PAD_InternalPullDown);
  482. GPIO_PinConfig(gLedCfg[Inx].pinPort, gLedCfg[Inx].pinInx, &nGpioCfg);
  483. GPIO_PinWrite(gLedCfg[Inx].pinPort, 1<<gLedCfg[Inx].pinInx, level <<gLedCfg[Inx].pinInx);
  484. }
  485. /**
  486. \fn void FaultDisplay(ledStaus_t status)
  487. \param[in] status equal to 1 ,turn on red led ; status equal to 0 ,turn off red led
  488. \brief RSSI display on led
  489. \return
  490. */
  491. void FaultDisplay(ledStaus_t status)
  492. {
  493. gpio_pin_config_t nGpioCfg={0};
  494. nGpioCfg.pinDirection = GPIO_DirectionOutput;
  495. nGpioCfg.misc.initOutput = 1;
  496. pad_config_t padConfig;
  497. PAD_GetDefaultConfig(&padConfig);
  498. padConfig.mux = gLedCfg[4].padMutex;
  499. PAD_SetPinConfig(gLedCfg[4].padInx, &padConfig);
  500. PAD_SetPinPullConfig(gLedCfg[4].padInx, PAD_InternalPullDown);
  501. GPIO_PinConfig(gLedCfg[4].pinPort, gLedCfg[4].pinInx, &nGpioCfg);
  502. GPIO_PinWrite(gLedCfg[4].pinPort, 1<<gLedCfg[4].pinInx, status<<gLedCfg[4].pinInx);
  503. }
  504. /**
  505. * @brief
  506. * @param
  507. * @return
  508. */
  509. void SPI_CS_High(void)
  510. {
  511. GPIO_PinWrite(SPI_SSN_GPIO_INSTANCE, 1 << SPI_SSN_GPIO_INDEX, 1 << SPI_SSN_GPIO_INDEX);
  512. }
  513. /**
  514. * @brief
  515. * @param
  516. * @return
  517. */
  518. void SPI_CS_Low(void)
  519. {
  520. GPIO_PinWrite(SPI_SSN_GPIO_INSTANCE, 1 << SPI_SSN_GPIO_INDEX, 0);
  521. }
  522. #ifdef SPI_ANALOG
  523. /**
  524. * @brief
  525. * @param
  526. * @return
  527. */
  528. void SPI_Clk_High(void)
  529. {
  530. GPIO_PinWrite(SPI_CLK_GPIO_INSTANCE, 1<<SPI_CLK_GPIO_INDEX,1<<SPI_CLK_GPIO_INDEX);
  531. }
  532. /**
  533. * @brief
  534. * @param
  535. * @return
  536. */
  537. void SPI_Clk_Low(void)
  538. {
  539. GPIO_PinWrite(SPI_CLK_GPIO_INSTANCE, 1<<SPI_CLK_GPIO_INDEX,0);
  540. }
  541. /**
  542. * @brief
  543. * @param
  544. * @return
  545. */
  546. void SPI_Mosi_High(void)
  547. {
  548. GPIO_PinWrite(SPI_MOSI_GPIO_INSTANCE, 1<<SPI_MOSI_GPIO_INDEX,1<<SPI_MOSI_GPIO_INDEX);
  549. }
  550. /**
  551. * @brief
  552. * @param
  553. * @return
  554. */
  555. void SPI_Mosi_Low(void)
  556. {
  557. GPIO_PinWrite(SPI_MOSI_GPIO_INSTANCE, 1<<SPI_MOSI_GPIO_INDEX,0);
  558. }
  559. /**
  560. * @brief
  561. * @param
  562. * @return
  563. */
  564. UINT8 SPI_MISO_Read(void)
  565. {
  566. return GPIO_PinRead(SPI_MISO_GPIO_INSTANCE,SPI_MISO_GPIO_INDEX);
  567. }
  568. #endif
  569. /**
  570. * @brief Software SPI_Flash bus driver basic function, send a single byte to MOSI,
  571. * and accept MISO data at the same time.
  572. * @param[in] u8Data:Data sent on the MOSI data line
  573. * @return u8Out: Data received on the MISO data line
  574. */
  575. UINT8 SPI_Write_Byte(UINT8 u8Data)
  576. {
  577. UINT8 data = u8Data;
  578. #ifdef SPI_ANALOG
  579. UINT8 i=0;
  580. for(i=0;i<8;i++){
  581. SPI_Clk_Low();
  582. if((u8Data<<i)&0x80)
  583. SPI_Mosi_High();
  584. else
  585. SPI_Mosi_Low();
  586. SPI_Clk_High();
  587. }
  588. SPI_Clk_Low();
  589. #else
  590. spiMasterDrv->Transfer(&u8Data,&data,1);
  591. #endif
  592. return 0;
  593. }
  594. #ifdef SPI_ANALOG
  595. /**
  596. * @brief
  597. * @param
  598. * @return
  599. */
  600. UINT8 SPI_Read_Byte(void)
  601. {
  602. UINT8 i=0;
  603. UINT8 rByte=0;
  604. SPI_Clk_Low();
  605. for(i=0;i<8;i++){
  606. SPI_Clk_High();
  607. rByte<<=1;
  608. rByte |= SPI_MISO_Read();
  609. SPI_Clk_Low();
  610. }
  611. return rByte;
  612. }
  613. #endif
  614. /**
  615. \fn INT32 CAN_ReadReg(UINT8 addr)
  616. \param[in] addr CAN register addr
  617. \brief write can register
  618. \return
  619. */
  620. INT32 CAN_WriteReg(UINT8 addr, UINT8 value)
  621. {
  622. SPI_CS_Low();
  623. SPI_Write_Byte(CAN_WRITE);
  624. SPI_Write_Byte(addr);
  625. SPI_Write_Byte(value);
  626. SPI_CS_High();
  627. return 0;
  628. }
  629. /**
  630. \fn INT32 CAN_ReadReg(UINT8 reg, UINT8 len, UINT8 *buf)
  631. \param[in] reg: can register addr
  632. \brief read can register
  633. \return
  634. */
  635. INT32 CAN_ReadReg(UINT8 reg, UINT8 len, UINT8 *buf)
  636. {
  637. UINT8 i =0;
  638. UINT8 data=0;
  639. INT32 res;
  640. if(buf == NULL) return -1;
  641. SPI_CS_Low();
  642. SPI_Write_Byte(CAN_READ);
  643. SPI_Write_Byte(reg);
  644. #ifdef SPI_ANALOG
  645. for(i=0;i<len;i++){
  646. buf[i]= SPI_Read_Byte();
  647. }
  648. #else
  649. for(i=0;i<len;i++){
  650. spiMasterDrv->Transfer(&data,&buf[i],1);
  651. }
  652. #endif
  653. SPI_CS_High();
  654. return i;
  655. }
  656. /**
  657. \fn UINT8 CanTriggerEvtInit(void)
  658. \param[in]
  659. \brief generate irq,then notify app
  660. \return 1 fail; 0 ok;
  661. */
  662. UINT8 CanTriggerEvtInit(void)
  663. {
  664. /*for msg queue create*/
  665. osMessageQueueAttr_t queue_attr;
  666. memset(&queue_attr, 0, sizeof(queue_attr));
  667. queue_attr.cb_mem = &can_recv_queue_cb;
  668. queue_attr.cb_size = sizeof(can_recv_queue_cb);
  669. queue_attr.mq_mem = can_recv_queue_buf;
  670. queue_attr.mq_size = sizeof(can_recv_queue_buf);
  671. can_recv_msgqueue = osMessageQueueNew(I2C_RECV_QUEUE_BUF_SIZE,1, &queue_attr);
  672. //printf("CanTriggerEvtInit \r\n");
  673. return 0;
  674. }
  675. /**
  676. \fn void CanWaitEvt(UINT32 timeout)
  677. \param[in]
  678. \brief
  679. \return
  680. */
  681. void CanWaitEvt(UINT32 timeout)
  682. {
  683. osStatus_t status;
  684. UINT8 msg = 0;
  685. UINT32 mask;
  686. status = osMessageQueueGet(can_recv_msgqueue, &msg, 0 , osWaitForever);
  687. //printf("msg = %#x\r\n",msg);
  688. }
  689. /**
  690. \fn void CanTiggerEvt(UINT8 cmd)
  691. \param[in]
  692. \brief
  693. \return
  694. */
  695. void CanTiggerEvt(UINT8 cmd)
  696. {
  697. osStatus_t status;
  698. UINT8 msg = cmd;
  699. status = osMessageQueuePut(can_recv_msgqueue, &msg, 0, 0);
  700. }
  701. /*******************************************************************************
  702. * o����y?? : MCP2515_Reset
  703. * ?����? : ����?��?��????��?����?t?��??MCP2515
  704. * ��?��? : ?T
  705. * ��?3? : ?T
  706. * ����???�� : ?T
  707. * ?��?�� : ???��2???��??��?��???a������?���䨬?,2��???��?t����?��?a?????�꨺?
  708. *******************************************************************************/
  709. INT32 HAL_Can_Reset(void)
  710. {
  711. SPI_CS_Low();
  712. SPI_Write_Byte(CAN_RESET);
  713. SPI_CS_High();
  714. return 0;
  715. }
  716. /*******************************************************************************
  717. * o����y?? : MCP2515_Init
  718. * ?����? : MCP25153?��??��????
  719. * ��?��? : ?T
  720. * ��?3? : ?T
  721. * ����???�� : ?T
  722. * ?��?�� : 3?��??���㨹������o����?t?��???��1�����2����??������???�������?��??��1?????�̨�?��
  723. *******************************************************************************/
  724. void HAL_Can_Init(Can_InitType param)
  725. {
  726. UINT8 temp=0,temp1=0;
  727. INT32 res = -1;
  728. gpio_pin_config_t config;
  729. config.pinDirection = GPIO_DirectionOutput;
  730. config.misc.initOutput = 1;
  731. pad_config_t padConfig;
  732. PAD_GetDefaultConfig(&padConfig);
  733. //POWER
  734. padConfig.mux = PAD_MuxAlt0;
  735. PAD_SetPinConfig(28, &padConfig);
  736. GPIO_PinWrite(0, 1 << GPIO_CAN_POWER, 1 << GPIO_CAN_POWER);
  737. HAL_Can_Reset(); //¡¤¡é?¨ª?¡ä????¨¢?¨¨¨ª?t?¡ä??MCP2515
  738. osDelay(100/portTICK_PERIOD_MS);
  739. CAN_WriteReg(CANCTRL,OPMODE_CONFIG |CLKOUT_ENABLED);
  740. CAN_ReadReg(CANCTRL,1,&temp);//?¨¢¨¨?CAN¡Á¡ä¨¬???¡ä??¡Â¦Ì??¦Ì
  741. #ifdef USING_PRINTF
  742. //printf("[%d] CANCTRL = %#x \r\n",__LINE__,temp);
  743. #endif
  744. CAN_WriteReg(CNF1,param.baudrate);
  745. CAN_WriteReg(CNF2,0x80|PHSEG1_3TQ|PRSEG_1TQ);
  746. CAN_WriteReg(CNF3,PHSEG2_3TQ);
  747. if(param.packType == STD_PACK){
  748. /*?����???2��??��??��*/
  749. CAN_WriteReg(TXB0SIDH,0xFF&(param.TxStdIDH));//����?��?o3??��0������?������?��?????
  750. CAN_WriteReg(TXB0SIDL,0xE0&(param.TxStdIDL));//����?��?o3??��0������?������?��?�̨�??
  751. CAN_WriteReg(RXM0SIDH,0x00);
  752. CAN_WriteReg(RXM0SIDL,0x00);
  753. CAN_WriteReg(RXM1SIDH,0x00);
  754. CAN_WriteReg(RXM1SIDL,0x00);
  755. /*?����???2��??��??��*/
  756. CAN_WriteReg(RXF0SIDH,0xFF&(param.RxStdIDH[0]));
  757. CAN_WriteReg(RXF0SIDL,0xE0&(param.RxStdIDL[0]));
  758. CAN_WriteReg(RXF1SIDH,0xFF&(param.RxStdIDH[1]));
  759. CAN_WriteReg(RXF1SIDL,0xE0&(param.RxStdIDL[1]));
  760. #if 0
  761. CAN_WriteReg(RXF2SIDH,0x00);
  762. CAN_WriteReg(RXF2SIDL,0xa0);
  763. CAN_WriteReg(RXF3SIDH,0x00);
  764. CAN_WriteReg(RXF3SIDL,0x40);
  765. CAN_WriteReg(RXF4SIDH,0x00);
  766. CAN_WriteReg(RXF4SIDL,0x60);
  767. CAN_WriteReg(RXF5SIDH,0x00);
  768. CAN_WriteReg(RXF5SIDL,0x80);
  769. #else
  770. CAN_WriteReg(RXF2SIDH,0xFF&(param.RxStdIDH[2]));
  771. CAN_WriteReg(RXF2SIDL,0xE0&(param.RxStdIDL[2]));
  772. CAN_WriteReg(RXF3SIDH,0xFF&(param.RxStdIDH[3]));
  773. CAN_WriteReg(RXF3SIDL,0xE0&(param.RxStdIDL[3]));
  774. CAN_WriteReg(RXF4SIDH,0xFF&(param.RxStdIDH[4]));
  775. CAN_WriteReg(RXF4SIDL,0xE0&(param.RxStdIDL[4]));
  776. CAN_WriteReg(RXF5SIDH,0xFF&(param.RxStdIDH[5]));
  777. CAN_WriteReg(RXF5SIDL,0xE0&(param.RxStdIDL[5]));
  778. #endif
  779. CAN_WriteReg(RXB0CTRL,RXM_RCV_ALL);
  780. CAN_WriteReg(RXB0DLC,DLC_8);
  781. CAN_WriteReg(RXB1CTRL,RXM_RCV_ALL);
  782. CAN_WriteReg(RXB1DLC,DLC_8);
  783. }
  784. else if(param.packType == EXT_PACK)
  785. {
  786. /*TXB0*/
  787. CAN_WriteReg(TXB0SIDH,0xFF&(param.TxStdIDH));
  788. CAN_WriteReg(TXB0SIDL,(0xEB&(param.TxStdIDL))|0x08);
  789. CAN_WriteReg(TXB0EID8,0xFF&(param.TxExtIDH));
  790. CAN_WriteReg(TXB0EID0,0xFF&(param.TxExtIDL));
  791. /*?����???2��??��??��*/
  792. CAN_WriteReg(RXM0SIDH,0x00); //FF->00 zhengchao
  793. CAN_WriteReg(RXM0SIDL,0x00); //E3->00 zhengchao
  794. CAN_WriteReg(RXM0EID8,0x00); //FF->00 zhengchao
  795. CAN_WriteReg(RXM0EID0,0x00); //FF->00 zhengchao
  796. /*?����???2��??��??��*/
  797. CAN_WriteReg(RXF0SIDH,0xFF&(param.RxStdIDH[0]));
  798. CAN_WriteReg(RXF0SIDL,(0xEB&(param.RxStdIDL[0]))|0x08);
  799. CAN_WriteReg(RXF0EID8,0xFF&(param.RxExtIDH[0]));
  800. CAN_WriteReg(RXF0EID8,0xFF&(param.RxExtIDL[0]));
  801. CAN_WriteReg(RXF1SIDH,0xFF&(param.RxStdIDH[1]));
  802. CAN_WriteReg(RXF1SIDL,(0xEB&(param.RxStdIDL[1]))|0x08);
  803. CAN_WriteReg(RXF1EID8,0xFF&(param.RxExtIDH[1]));
  804. CAN_WriteReg(RXF1EID8,0xFF&(param.RxExtIDL[1]));
  805. CAN_WriteReg(RXF2SIDH,0xFF&(param.RxStdIDH[2]));
  806. CAN_WriteReg(RXF2SIDL,(0xEB&(param.RxStdIDL[2]))|0x08);
  807. CAN_WriteReg(RXF2EID8,0xFF&(param.RxExtIDH[2]));
  808. CAN_WriteReg(RXF2EID8,0xFF&(param.RxExtIDL[2]));
  809. CAN_WriteReg(RXF3SIDH,0xFF&(param.RxStdIDH[3]));
  810. CAN_WriteReg(RXF3SIDL,(0xEB&(param.RxStdIDL[3]))|0x08);
  811. CAN_WriteReg(RXF3EID8,0xFF&(param.RxExtIDH[3]));
  812. CAN_WriteReg(RXF3EID8,0xFF&(param.RxExtIDL[3]));
  813. CAN_WriteReg(RXF4SIDH,0xFF&(param.RxStdIDH[4]));
  814. CAN_WriteReg(RXF4SIDL,(0xEB&(param.RxStdIDL[4]))|0x08);
  815. CAN_WriteReg(RXF4EID8,0xFF&(param.RxExtIDH[4]));
  816. CAN_WriteReg(RXF4EID8,0xFF&(param.RxExtIDL[4]));
  817. CAN_WriteReg(RXF5SIDH,0xFF&(param.RxStdIDH[5]));
  818. CAN_WriteReg(RXF5SIDL,(0xEB&(param.RxStdIDL[5]))|0x08);
  819. CAN_WriteReg(RXF5EID8,0xFF&(param.RxExtIDH[5]));
  820. CAN_WriteReg(RXF5EID8,0xFF&(param.RxExtIDL[5]));
  821. CAN_WriteReg(RXB0CTRL,RXM_VALID_EXT|BUKT_ROLLOVER);
  822. CAN_WriteReg(RXB0DLC,DLC_8);
  823. CAN_WriteReg(RXB1CTRL,RXM_VALID_EXT|FILHIT1_FLTR_2);
  824. CAN_WriteReg(RXB1DLC,DLC_8);
  825. }
  826. //CAN_WriteReg(BFPCTRL,0x0F);//zhengchao20210304 add
  827. CAN_WriteReg(CANINTE,0x43); //zhengchao20210304 0x43 -> 0x03
  828. CAN_WriteReg(CANINTF,0x00);
  829. CAN_WriteReg(CANCTRL,param.mode |CLKOUT_ENABLED);//??MCP2515¨¦¨¨???a?y3¡ê?¡ê¨º?,¨ª?3??????¡ê¨º? REQOP_NORMAL|CLKOUT_ENABLED
  830. CAN_ReadReg(CANSTAT,1,&temp);//?¨¢¨¨?CAN¡Á¡ä¨¬???¡ä??¡Â¦Ì??¦Ì
  831. if(param.mode !=(temp&0xE0))//?D??MCP2515¨º?¡¤?¨°??-??¨¨??y3¡ê?¡ê¨º?
  832. {
  833. CAN_WriteReg(CANCTRL,param.mode|CLKOUT_ENABLED);//?¨´¡ä???MCP2515¨¦¨¨???a?y3¡ê?¡ê¨º?,¨ª?3??????¡ê¨º?REQOP_NORMAL
  834. }
  835. }
  836. /*******************************************************************************
  837. * : HAL_Can_Sleep
  838. *
  839. *
  840. *
  841. *
  842. *
  843. *******************************************************************************/
  844. void HAL_Can_Sleep(void)
  845. {
  846. UINT8 temp=0,temp2=0,t=0;
  847. do{
  848. CAN_WriteReg(CANCTRL,OPMODE_CONFIG);
  849. CAN_WriteReg(CANINTE,WAKIE|RX0IE|RX1IE);
  850. //CAN_WriteReg(CNF3, WAKFIL);
  851. CAN_ReadReg(CANSTAT,1,&temp);
  852. CAN_WriteReg(CANCTRL,OPMODE_SLEEP |CLKOUT_DISABLED);
  853. #ifdef USING_PRINTF
  854. //printf("%s[%d] [%#x]\r\n",__FUNCTION__, __LINE__,temp);
  855. #endif
  856. if(OPMODE_SLEEP ==(temp&0xE0)){
  857. #ifdef USING_PRINTF
  858. //printf("SLEEP SUC \r\n");
  859. #endif
  860. break;
  861. }
  862. }while(t++<3);
  863. //POWER
  864. GPIO_PinWrite(0, 1 << GPIO_CAN_POWER, 0);
  865. }
  866. /*******************************************************************************
  867. * o¡¥¨ºy?? : HAL_Can_Transmit
  868. * ?¨¨¨º? : CAN¡¤¡é?¨ª???¡§3¡è?¨¨¦Ì?¨ºy?Y
  869. * ¨º?¨¨? : *CAN_TX_Buf(¡äy¡¤¡é?¨ª¨ºy?Y?o3???????),len(¡äy¡¤¡é?¨ª¨ºy?Y3¡è?¨¨)
  870. * ¨º?3? : ?T
  871. * ¡¤¦Ì???¦Ì : ?T
  872. * ?¦Ì?¡Â : ?T
  873. *******************************************************************************/
  874. INT8 HAL_Can_Transmit(CAN_Msg_Type Can_TxMsg)
  875. {
  876. UINT8 tryTim,count,value,i,temp,TXBufferCase = 0;
  877. INT8 ret = 0;
  878. UINT8 TXB0CTRLvalue,TXB1CTRLvalue,TXB2CTRLvalue,CANINTFValue=0;
  879. CAN_ReadReg(TXB0CTRL, 1, &TXB0CTRLvalue);
  880. CAN_ReadReg(TXB1CTRL, 1, &TXB1CTRLvalue);
  881. CAN_ReadReg(TXB2CTRL, 1, &TXB2CTRLvalue);
  882. if((TXB0CTRLvalue&TXREQ)==0)
  883. TXBufferCase = 0;
  884. else if((TXB1CTRLvalue&TXREQ)==0)
  885. TXBufferCase =1;
  886. else if((TXB2CTRLvalue&TXREQ)==0)
  887. TXBufferCase =2;
  888. switch(TXBufferCase)
  889. {
  890. case 0:
  891. {
  892. //tryTim=0;
  893. //CAN_RseadReg(TXB0CTRL,1,&value);
  894. //while((value&0x08) && (tryTim<50))//?��?��?��?3D?���䨬???��?,�̨���yTXREQ����????��?
  895. //{
  896. // CAN_ReadReg(TXB0CTRL,1,&value);
  897. // osDelay(1/portTICK_PERIOD_MS);
  898. // tryTim++;
  899. //}
  900. /*TXB0*/
  901. CAN_WriteReg(TXB0SIDH,0xFF&((Can_TxMsg.Id)>>3));//����?��?o3??��0������?������?��?????
  902. CAN_WriteReg(TXB0SIDL,0xE0&((Can_TxMsg.Id)<<5));//����?��?o3??��0������?������?��?�̨�??
  903. for(i=0;i<Can_TxMsg.DLC;i++)
  904. {
  905. CAN_WriteReg(TXB0D0+i,Can_TxMsg.Data[i]);//??��y����?����?��y?YD�䨨?����?��?o3???��??��
  906. }
  907. CAN_WriteReg(TXB0DLC,Can_TxMsg.DLC);//??��???��y����?����?��y?Y3��?��D�䨨?����?��?o3??��0��?����?��3��?��??��??��
  908. SPI_CS_Low();
  909. CAN_WriteReg(TXB0CTRL,TXREQ);//???������?������??
  910. //SPI_CS_High();
  911. ret = 0;
  912. break;
  913. }
  914. case 1:
  915. {
  916. /*TXB0*/
  917. CAN_WriteReg(TXB1SIDH,0xFF&((Can_TxMsg.Id)>>3));//����?��?o3??��0������?������?��?????
  918. CAN_WriteReg(TXB1SIDL,0xE0&((Can_TxMsg.Id)<<5));//����?��?o3??��0������?������?��?�̨�??
  919. for(i=0;i<Can_TxMsg.DLC;i++)
  920. {
  921. CAN_WriteReg(TXB1D0+i,Can_TxMsg.Data[i]);//??��y����?����?��y?YD�䨨?����?��?o3???��??��
  922. }
  923. CAN_WriteReg(TXB1DLC,Can_TxMsg.DLC);//??��???��y����?����?��y?Y3��?��D�䨨?����?��?o3??��0��?����?��3��?��??��??��
  924. SPI_CS_Low();
  925. CAN_WriteReg(TXB1CTRL,TXREQ);//???������?������??
  926. //SPI_CS_High();
  927. ret = 1;
  928. break;
  929. }
  930. case 2:
  931. {
  932. /*TXB0*/
  933. CAN_WriteReg(TXB2SIDH,0xFF&((Can_TxMsg.Id)>>3));//����?��?o3??��0������?������?��?????
  934. CAN_WriteReg(TXB2SIDL,0xE0&((Can_TxMsg.Id)<<5));//����?��?o3??��0������?������?��?�̨�??
  935. for(i=0;i<Can_TxMsg.DLC;i++)
  936. {
  937. CAN_WriteReg(TXB2D0+i,Can_TxMsg.Data[i]);//??��y����?����?��y?YD�䨨?����?��?o3???��??��
  938. }
  939. CAN_WriteReg(TXB2DLC,Can_TxMsg.DLC);//??��???��y����?����?��y?Y3��?��D�䨨?����?��?o3??��0��?����?��3��?��??��??��
  940. SPI_CS_Low();
  941. CAN_WriteReg(TXB2CTRL,TXREQ);//???������?������??
  942. //SPI_CS_High();
  943. ret = 2;
  944. break;
  945. }
  946. default:
  947. {
  948. ret = -1;
  949. break;
  950. }
  951. }
  952. CAN_ReadReg(TXB0CTRL, 1, &TXB0CTRLvalue);
  953. CAN_ReadReg(TXB1CTRL, 1, &TXB1CTRLvalue);
  954. CAN_ReadReg(TXB2CTRL, 1, &TXB2CTRLvalue);
  955. tryTim = 0;
  956. while((TXB0CTRLvalue&TXREQ) && (TXB1CTRLvalue&TXREQ) && (TXB1CTRLvalue&TXREQ) && (tryTim<50))
  957. {
  958. //SPI_CS_High();
  959. CAN_ReadReg(TXB0CTRL, 1, &TXB0CTRLvalue);
  960. CAN_ReadReg(TXB1CTRL, 1, &TXB1CTRLvalue);
  961. CAN_ReadReg(TXB2CTRL, 1, &TXB2CTRLvalue);
  962. osDelay(1);
  963. tryTim++;
  964. }
  965. CAN_ReadReg(CANINTF, 1, &CANINTFValue);
  966. SPI_CS_High();
  967. if((TXB0CTRLvalue&0x20)||(TXB1CTRLvalue&0x20)||(TXB2CTRLvalue&0x20)||(CANINTFValue&0x80))
  968. {
  969. ret = -1;
  970. }
  971. return ret;
  972. }
  973. /*******************************************************************************
  974. * o����y?? : HAL_Can_Receive(UINT8 *CAN_RX_Buf)
  975. * ?����? : CAN?����?��???��y?Y
  976. * ��?��? : *CAN_TX_Buf(��y?����?��y?Y?o3???????)
  977. * ��?3? : ?T
  978. * ����???�� : len(?����?��?��y?Y��?3��?��,0~8��??��)
  979. * ?��?�� : ?T
  980. *******************************************************************************/
  981. void HAL_Can_Receive(CAN_Msg_Type* CanRxMsgBuffer)
  982. {
  983. UINT8 i=0,len=0,temp=0;
  984. UINT8 SIdH,SIdL,EId8,EId0;
  985. //static UINT16 counterBuff0,counterBuff1 = 0;
  986. CAN_ReadReg(CANINTF,1,&temp);
  987. #ifdef USING_PRINTF
  988. //printf("CANINTF = 0x%x\n",temp);
  989. //USARTdrv->Send(&temp,1);
  990. #endif
  991. if(temp & 0x01) //Rx Buffer 0
  992. {
  993. /*get the id information*/
  994. CAN_ReadReg(RXB0SIDH,1,&SIdH);
  995. CAN_ReadReg(RXB0SIDL,1,&SIdL);
  996. CAN_ReadReg(RXB0EID8,1,&EId8);
  997. CAN_ReadReg(RXB0EID0,1,&EId0);
  998. CAN_ReadReg(RXB0DLC,1,&len);
  999. len = len&0x0F;
  1000. CanRxMsgBuffer[0].DLC = len;
  1001. if(SIdL & 0x8) // if SIdL.3 = 1, the id belongs to ExtID
  1002. {
  1003. (CanRxMsgBuffer[0]).Id = ((SIdH<<5 | (SIdL>>5)<<2 | SIdL&0x3 )<<16 | (EId8<<8) | EId0);
  1004. }
  1005. else
  1006. {
  1007. (CanRxMsgBuffer[0]).Id = SIdH<<3 | SIdL>>5;
  1008. }
  1009. i = 0;
  1010. while(i<len)
  1011. {
  1012. CAN_ReadReg(RXB0D0+i,1,&((CanRxMsgBuffer[0]).Data[i]));
  1013. i++;
  1014. }
  1015. #ifdef USING_PRINTF1
  1016. printf("buffer0 ID = %x\n",CanRxMsgBuffer[0].Id);
  1017. for(i=0;i<8;i++)
  1018. {
  1019. printf("%x ",CanRxMsgBuffer[0].Data[i]);
  1020. }
  1021. printf("\n");
  1022. #endif
  1023. }
  1024. if(temp & 0x02) //RX Buffer 1
  1025. {
  1026. /*get the id information*/
  1027. CAN_ReadReg(RXB1SIDH,1,&SIdH);
  1028. CAN_ReadReg(RXB1SIDL,1,&SIdL);
  1029. CAN_ReadReg(RXB1EID8,1,&EId8);
  1030. CAN_ReadReg(RXB1EID0,1,&EId0);
  1031. CAN_ReadReg(RXB1DLC,1,&len);
  1032. len = len & 0x0F;
  1033. CanRxMsgBuffer[1].DLC = len;
  1034. if(SIdL & 0x8) // SIdL.3 = 1, ExtID
  1035. {
  1036. (CanRxMsgBuffer[1]).Id = ((SIdH<<5 | (SIdL>>5)<<2 | SIdL&0x3 )<<16 | (EId8<<8) | EId0);
  1037. }
  1038. else
  1039. {
  1040. (CanRxMsgBuffer[1]).Id = SIdH<<3 | SIdL>>5;
  1041. }
  1042. i = 0 ;
  1043. while(i<len)
  1044. {
  1045. CAN_ReadReg(RXB1D0+i,1,&((CanRxMsgBuffer[1]).Data[i]));
  1046. i++;
  1047. }
  1048. #ifdef USING_PRINTF1
  1049. printf("buffer1 ID = %x\n",CanRxMsgBuffer[1].Id);
  1050. for(i=0;i<8;i++)
  1051. {
  1052. printf("%x ",CanRxMsgBuffer[1].Data[i]);
  1053. }
  1054. printf("\n");
  1055. #endif
  1056. }
  1057. CAN_WriteReg(CANINTF,0);
  1058. // CAN_ReadReg(CANINTF,1,&temp);
  1059. // printf("CANINTF_1 = 0x%x\n",temp);
  1060. }
  1061. /**
  1062. \fn void CanHandleDataCallback(UINT32 event)
  1063. \param[in] event spi irq event
  1064. \brief base on event,handle different situation
  1065. \return
  1066. */
  1067. void CanHandleDataCallback(UINT32 event)
  1068. {
  1069. if(event & ARM_SPI_EVENT_TRANSFER_COMPLETE)
  1070. {
  1071. }
  1072. else if(event & ARM_SPI_EVENT_DATA_LOST)
  1073. {
  1074. }
  1075. else if(event & ARM_SPI_EVENT_MODE_FAULT)
  1076. {
  1077. }
  1078. #if 0
  1079. #ifdef USING_PRINTF
  1080. //printf("[%d] CanHandleDataCallback :%d\r\n",__LINE__,event);
  1081. #else
  1082. ECOMM_TRACE(UNILOG_PLA_APP,CAN_CB1, P_INFO, 1, "SPI event [%u] coming!",event);
  1083. #endif
  1084. #endif
  1085. }
  1086. /**
  1087. \fn void CanSPIHandler(ARM_SPI_SignalEvent_t cb_event)
  1088. \param[in] cb_event :
  1089. \brief init spi module
  1090. \return
  1091. */
  1092. void CanSPIHandler(ARM_SPI_SignalEvent_t cb_event,UINT8 mode,UINT8 dataBits, UINT32 spiRate )
  1093. {
  1094. #ifdef SPI_ANALOG
  1095. gpio_pin_config_t nGpioCfg={0};
  1096. nGpioCfg.pinDirection = GPIO_DirectionOutput;
  1097. nGpioCfg.misc.initOutput = 1;
  1098. pad_config_t padConfig;
  1099. PAD_GetDefaultConfig(&padConfig);
  1100. /*cs*/
  1101. padConfig.mux = PAD_MuxAlt0;
  1102. PAD_SetPinConfig(SPI_SSN_GPIO_PAD_ADDR, &padConfig);
  1103. PAD_SetPinPullConfig(SPI_SSN_GPIO_PAD_ADDR, PAD_InternalPullDown);
  1104. GPIO_PinConfig(SPI_SSN_GPIO_INSTANCE, SPI_SSN_GPIO_INDEX, &nGpioCfg);
  1105. GPIO_PinWrite(SPI_SSN_GPIO_INSTANCE, 1<<SPI_SSN_GPIO_INDEX,0);
  1106. /*
  1107. clk
  1108. */
  1109. padConfig.mux = PAD_MuxAlt0;
  1110. PAD_SetPinConfig(SPI_CLK_GPIO_PAD_ADDR, &padConfig);
  1111. PAD_SetPinPullConfig(SPI_CLK_GPIO_PAD_ADDR, PAD_InternalPullDown);
  1112. GPIO_PinConfig(SPI_CLK_GPIO_INSTANCE, SPI_CLK_GPIO_INDEX, &nGpioCfg);
  1113. GPIO_PinWrite(SPI_CLK_GPIO_INSTANCE, 1<<SPI_CLK_GPIO_INDEX,0);
  1114. /*mosi*/
  1115. padConfig.mux = PAD_MuxAlt0;
  1116. PAD_SetPinConfig(SPI_MOSI_GPIO_PAD_ADDR, &padConfig);
  1117. PAD_SetPinPullConfig(SPI_MOSI_GPIO_PAD_ADDR, PAD_InternalPullDown);
  1118. GPIO_PinConfig(SPI_MOSI_GPIO_INSTANCE, SPI_MOSI_GPIO_INDEX, &nGpioCfg);
  1119. GPIO_PinWrite(SPI_MOSI_GPIO_INSTANCE, 1<<SPI_MOSI_GPIO_INDEX,0);
  1120. /*miso*/
  1121. nGpioCfg.pinDirection = GPIO_DirectionInput;
  1122. nGpioCfg.misc.initOutput = 0;
  1123. padConfig.mux = PAD_MuxAlt0;
  1124. padConfig.pullSelect = PAD_PullInternal;
  1125. padConfig.pullUpEnable = PAD_PullUpDisable;
  1126. padConfig.pullDownEnable = PAD_PullDownEnable;
  1127. PAD_SetPinConfig(SPI_MISO_GPIO_PAD_ADDR, &padConfig);
  1128. GPIO_PinConfig(SPI_MISO_GPIO_INSTANCE, SPI_MISO_GPIO_INDEX, &nGpioCfg);
  1129. #else
  1130. // Initialize master spi
  1131. spiMasterDrv->Initialize(NULL);
  1132. // Power on
  1133. spiMasterDrv->PowerControl(ARM_POWER_FULL);
  1134. // Configure slave spi bus
  1135. spiMasterDrv->Control(ARM_SPI_MODE_MASTER | mode | ARM_SPI_DATA_BITS(dataBits) |ARM_SPI_MSB_LSB | ARM_SPI_SS_MASTER_SW, spiRate);
  1136. #endif
  1137. }
  1138. /**
  1139. \fn INT32 ZM01RecvParam(UINT8 *param)
  1140. \param[in]
  1141. \brief read ZM01 register
  1142. \return execution_status
  1143. */
  1144. INT32 ZM01RecvParam(UINT8 *param)
  1145. {
  1146. INT32 res = 0;
  1147. UINT8 tempBuffer = 0xaa;
  1148. if(param == NULL) return -7;
  1149. res = i2cDrvInstance->MasterTransmit(ZM01_DEVICE_ADDR, &tempBuffer, 1, true);
  1150. res = i2cDrvInstance->MasterReceive(ZM01_DEVICE_ADDR, param, 1, true);
  1151. return res;
  1152. }
  1153. /**
  1154. \fn INT32 GSENSOR_WriteReg(UINT8 addr, UINT8 value)
  1155. \param[in] addr GSENSOR register addr
  1156. \brief Write to GSENSOR register
  1157. \return
  1158. */
  1159. INT32 GSENSOR_WriteReg(UINT8 addr, UINT8 value)
  1160. {
  1161. UINT8 tempBuffer[2];
  1162. INT32 res = -1;
  1163. tempBuffer[0] = addr;
  1164. tempBuffer[1] = value;
  1165. return (i2cDrvInstance->MasterTransmit(GSENSOR_DEVICE_ADDR, tempBuffer, sizeof(tempBuffer), true));
  1166. }
  1167. /**
  1168. \fn INT32 GSENSOR_ReadReg(UINT8 reg, UINT8 len, UINT8 *buf)
  1169. \param[in] addr GSENSOR register addr
  1170. \brief read GSENSOR register
  1171. \return register value of GSENSOR
  1172. */
  1173. INT32 GSENSOR_ReadReg(UINT8 reg, UINT8 len, UINT8 *buf)
  1174. {
  1175. INT32 res = -1;
  1176. if(len > 8 || buf == NULL) return -1;
  1177. res = i2cDrvInstance->MasterTransmit(GSENSOR_DEVICE_ADDR, &reg, 1, true);
  1178. res = i2cDrvInstance->MasterReceive(GSENSOR_DEVICE_ADDR, buf, len, true);
  1179. return res;
  1180. }
  1181. /**
  1182. \fn void GsensorI2CCallback(UINT32 event)
  1183. \param[in] event : i2c irq event
  1184. \brief i2c irq event ,callback function
  1185. \return
  1186. */
  1187. void GsensorI2CCallback(UINT32 event)
  1188. {
  1189. switch(event)
  1190. {
  1191. case ARM_I2C_EVENT_TRANSFER_DONE:
  1192. break;
  1193. case ARM_I2C_EVENT_TRANSFER_INCOMPLETE:
  1194. break;
  1195. case ARM_I2C_EVENT_ADDRESS_NACK:
  1196. break;
  1197. case ARM_I2C_EVENT_BUS_ERROR:
  1198. break;
  1199. case ARM_I2C_EVENT_BUS_CLEAR:
  1200. break;
  1201. default:
  1202. break;
  1203. }
  1204. }
  1205. /**
  1206. \fn void HAL_I2C_CreateRecvTaskAndQueue(uint32_t event)
  1207. \param[in]
  1208. \brief RECV data
  1209. \return
  1210. */
  1211. void HAL_I2C_RecvControl(bool on)
  1212. {
  1213. EC_ASSERT(g_i2CRecvFlag, g_i2CRecvFlag, 0, 0);
  1214. if(on == true)
  1215. {
  1216. osEventFlagsClear(g_i2CRecvFlag, I2C_RECV_CONTROL_FLAG);
  1217. }
  1218. else
  1219. {
  1220. osEventFlagsSet(g_i2CRecvFlag, I2C_RECV_CONTROL_FLAG);
  1221. }
  1222. }
  1223. void GsensorTriggerEvent(UINT32 event ,UINT32 data)
  1224. {
  1225. osStatus_t status;
  1226. i2c_recv_msgqueue_obj_t msg={0};
  1227. msg.event = event;
  1228. msg.value = data;
  1229. status = osMessageQueuePut(i2c_recv_msgqueue, &msg, 0, 0);
  1230. if(status == osErrorResource)
  1231. {
  1232. ECOMM_TRACE(UNILOG_PLA_DRIVER, GsensorTriggerEvent_0, P_WARNING, 0, "I2C recv queue error");
  1233. }
  1234. }
  1235. static INT32 I2CEvtProcess(uint32_t evt)
  1236. {
  1237. INT32 ret;
  1238. #if SL_SC7A20_16BIT_8BIT
  1239. INT16 xyzData[7];
  1240. #else
  1241. INT8 xyzData[7];
  1242. #endif
  1243. HAL_I2C_RecvControl(true);
  1244. if(evt & I2C_INT1_REQ_BITMAP)
  1245. {
  1246. }
  1247. if(evt & I2C_INT2_REQ_BITMAP)
  1248. {
  1249. SL_SC7A20_Read_XYZ_Data(xyzData);
  1250. }
  1251. return 0;
  1252. }
  1253. static void HAL_I2C_RecvTaskEntry(void)
  1254. {
  1255. while(1)
  1256. {
  1257. uint32_t flag,mask;
  1258. osStatus_t status;
  1259. i2c_recv_msgqueue_obj_t msg;
  1260. flag = osEventFlagsWait(g_i2CRecvFlag, I2C_RECV_CONTROL_FLAG, osFlagsNoClear | osFlagsWaitAll, osWaitForever);
  1261. EC_ASSERT(flag == I2C_RECV_CONTROL_FLAG, flag, 0, 0);
  1262. status = osMessageQueueGet(i2c_recv_msgqueue, &msg, 0 , osWaitForever);
  1263. if(status == osOK)
  1264. {
  1265. mask = SaveAndSetIRQMask();
  1266. //handle data
  1267. //I2CEvtProcess(msg.event);
  1268. #ifdef USING_PRINTF
  1269. //printf("[%d]i2c recv event\r\n",__LINE__);
  1270. #else
  1271. ECOMM_TRACE(UNILOG_PLA_DRIVER, I2C_GSENSOR_D, P_INFO, 0, "i2c recv event");
  1272. #endif
  1273. RestoreIRQMask(mask);
  1274. }
  1275. }
  1276. }
  1277. static void HAL_I2C_CreateRecvTaskAndQueue(void)
  1278. {
  1279. if(g_halI2CInitFlag & HAL_I2C_RECV_TASK_QUEUE_CREATED)
  1280. {
  1281. return;
  1282. }
  1283. /*
  1284. for task create
  1285. */
  1286. osThreadId_t threadId;
  1287. osThreadAttr_t task_attr;
  1288. /*for msg queue create*/
  1289. osMessageQueueAttr_t queue_attr;
  1290. g_i2CRecvFlag = osEventFlagsNew(NULL);
  1291. EC_ASSERT(g_i2CRecvFlag, g_i2CRecvFlag, 0, 0);
  1292. memset(&queue_attr, 0, sizeof(queue_attr));
  1293. queue_attr.cb_mem = &i2c_recv_queue_cb;
  1294. queue_attr.cb_size = sizeof(i2c_recv_queue_cb);
  1295. queue_attr.mq_mem = i2c_recv_queue_buf;
  1296. queue_attr.mq_size = sizeof(i2c_recv_queue_buf);
  1297. i2c_recv_msgqueue = osMessageQueueNew(I2C_RECV_QUEUE_BUF_SIZE,sizeof(i2c_recv_msgqueue_obj_t), &queue_attr);
  1298. EC_ASSERT(i2c_recv_msgqueue, i2c_recv_msgqueue, 0, 0);
  1299. memset(& task_attr, 0, sizeof(task_attr));
  1300. memset(i2c_recv_task_stack, 0xA5, I2C_RECV_TASK_STACK_SIZE);
  1301. task_attr.name = "GsensorRecv";
  1302. task_attr.stack_size = I2C_RECV_TASK_STACK_SIZE;
  1303. task_attr.stack_mem = i2c_recv_task_stack;
  1304. task_attr.priority = osPriorityNormal;
  1305. task_attr.cb_mem = &i2c_recv_task;
  1306. task_attr.cb_size = sizeof(StaticTask_t);
  1307. threadId = osThreadNew(HAL_I2C_RecvTaskEntry, NULL, &task_attr);
  1308. EC_ASSERT(threadId, threadId, 0, 0);
  1309. g_halI2CInitFlag |= HAL_I2C_RECV_TASK_QUEUE_CREATED;
  1310. }
  1311. /**
  1312. \fn void Usart1Handler(uint8_t* strPtr, uint16_t strLen)
  1313. \param[in] PrintfSendStr for usart port;
  1314. \brief config usart port
  1315. \return
  1316. */
  1317. void PrintfSendStr(const UINT8 *format, ...)
  1318. {
  1319. va_list args;
  1320. UINT8 buf[128+1]={0};
  1321. va_start(args, format);
  1322. vsnprintf(buf+strlen(buf), 128-strlen(buf), format, args);
  1323. va_end(args);
  1324. HAL_UART_SendStr(PORT_USART_1,buf,strlen(buf));
  1325. }
  1326. #define PRINTF_DATA_RECV_BUFFER_SIZE (64)
  1327. uint8_t printf_uart_recv_buf[PRINTF_DATA_RECV_BUFFER_SIZE];
  1328. /**
  1329. \fn void PrintfDataRecvCallback(uint32_t event, void* dataPtr, uint32_t dataLen)
  1330. \param[in] event :Data receiving timeout processing and data receiving completion processing;
  1331. \ dataPtr : Point to receive data buff
  1332. \ dataLen : Received data length
  1333. \brief i2c irq event ,callback function
  1334. \return
  1335. */
  1336. void PrintfDataRecvCallback(UINT32 event, void* dataPtr, UINT32 dataLen)
  1337. {
  1338. //ECOMM_TRACE(UNILOG_PLA_APP, PrintfDataRecvCallback, P_SIG, 3, "event=%d, dataPtr=%s, dataLen=%d",event,dataPtr,dataLen);
  1339. slpManStartWaitATTimer();
  1340. }
  1341. void printfPostSendCallback(hal_uart_send_msg_type_t msgType, void* dataPtr, uint32_t dataLen){
  1342. // ECOMM_TRACE(UNILOG_PLA_APP, printfPostSendCallback, P_SIG, 3, "msgType=%d, dataPtr=%s, dataLen=%d",msgType,dataPtr,dataLen);
  1343. }
  1344. /**
  1345. \fn void Usart1Handler(UINT32 baudRate)
  1346. \param[in] baudRate for usart port;
  1347. \brief config usart port
  1348. \return
  1349. */
  1350. void Usart1Handler(UINT32 baudRate)
  1351. {
  1352. hal_uart_config_t halUartConfig = {0};
  1353. hal_uart_hardware_config_t hwConfig = {
  1354. ARM_POWER_FULL,
  1355. ARM_USART_MODE_ASYNCHRONOUS | ARM_USART_DATA_BITS_8 |
  1356. ARM_USART_PARITY_NONE | ARM_USART_STOP_BITS_1 |
  1357. ARM_USART_FLOW_CONTROL_NONE,
  1358. baudRate
  1359. };
  1360. halUartConfig.uartDriverHandler = printfHandle;
  1361. halUartConfig.recv_cb = PrintfDataRecvCallback;
  1362. halUartConfig.recvBuffPtr = printf_uart_recv_buf;
  1363. halUartConfig.recvBuffSize = PRINTF_DATA_RECV_BUFFER_SIZE;
  1364. halUartConfig.post_send_cb = printfPostSendCallback;
  1365. HAL_UART_InitHandler(PORT_USART_1, &halUartConfig, &hwConfig, HAL_UART_TASK_CREATE_FLAG_SEND_RECV);
  1366. HAL_UART_RecvFlowControl(false);
  1367. }
  1368. /**
  1369. \fn void GsensorI2CCallback(uint32_t event)
  1370. \param[in] event : i2c irq event
  1371. \brief i2c irq event ,callback function
  1372. \return
  1373. */
  1374. void GsensorI2CHandler(ARM_I2C_SignalEvent_t cb_event)
  1375. {
  1376. // Initialize with callback
  1377. i2cDrvInstance->Initialize(cb_event);
  1378. // Power on
  1379. i2cDrvInstance->PowerControl(ARM_POWER_FULL);
  1380. // Configure I2C bus
  1381. i2cDrvInstance->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_STANDARD);
  1382. i2cDrvInstance->Control(ARM_I2C_BUS_CLEAR, 0);
  1383. HAL_I2C_CreateRecvTaskAndQueue();
  1384. #ifdef USING_PRINTF
  1385. //printf("[%d] i2c config ok\r\n",__LINE__);
  1386. #else
  1387. ECOMM_TRACE(UNILOG_PLA_DRIVER, I2C_GSENSOR_I, P_INFO, 0, "i2c config ok");
  1388. #endif
  1389. }
  1390. /**
  1391. \fn void GPSSendStr(uint8_t* strPtr, uint16_t strLen)
  1392. \param[in] strPtr for gps usart port;
  1393. \brief
  1394. \return
  1395. */
  1396. void GPSSendStr(uint8_t* strPtr, uint16_t strLen)
  1397. {
  1398. HAL_UART_SendStr(PORT_USART_2,strPtr,strLen);
  1399. }
  1400. /**
  1401. \fn void GpsDataRecvCallback(uint32_t event, void* dataPtr, uint32_t dataLen)
  1402. \param[in] event :Data receiving timeout processing and data receiving completion processing;
  1403. \ dataPtr : Point to receive data buff
  1404. \ dataLen : Received data length
  1405. \brief i2c irq event ,callback function
  1406. \return
  1407. */
  1408. void GpsDataRecvCallback(UINT32 event, void* dataPtr, UINT32 dataLen)
  1409. {
  1410. if((event == ARM_USART_EVENT_RX_TIMEOUT) || (event == ARM_USART_EVENT_RECEIVE_COMPLETE)){
  1411. #ifdef USING_PRINTF
  1412. // //printf("GpsDataRecvCallback [%d] %s\r\n",dataLen,dataPtr);
  1413. #endif
  1414. if(gpsHandle!=NULL && dataLen>0){
  1415. gpsReqMsg gpsInfo;
  1416. gpsInfo.dataPtr=malloc(dataLen+1);
  1417. if(gpsInfo.dataPtr){
  1418. memcpy(gpsInfo.dataPtr,dataPtr,dataLen);
  1419. gpsInfo.len=dataLen;
  1420. osMessageQueuePut(gpsHandle, &gpsInfo, 0, 2000);
  1421. }
  1422. }
  1423. }
  1424. slpManStartWaitATTimer();
  1425. }
  1426. /**
  1427. \fn void GPSUsartHandler(ARM_DRIVER_USART * uartDriverHandler, uint32_t baudRate)
  1428. \param[in] baudRate for gps usart port;
  1429. \brief config gps usart port
  1430. \return
  1431. */
  1432. void GPSUsartHandler(UINT32 baudRate)
  1433. {
  1434. hal_uart_config_t halUartConfig = {0};
  1435. hal_uart_hardware_config_t hwConfig = {
  1436. ARM_POWER_FULL,
  1437. ARM_USART_MODE_ASYNCHRONOUS | ARM_USART_DATA_BITS_8 |
  1438. ARM_USART_PARITY_NONE | ARM_USART_STOP_BITS_1 |
  1439. ARM_USART_FLOW_CONTROL_NONE,
  1440. baudRate
  1441. };
  1442. halUartConfig.uartDriverHandler = usartHandle;
  1443. halUartConfig.recv_cb = GpsDataRecvCallback;
  1444. halUartConfig.recvBuffPtr = gps_uart_recv_buf;
  1445. halUartConfig.recvBuffSize = GPS_DATA_RECV_BUFFER_SIZE;
  1446. HAL_UART_InitHandler(PORT_USART_2, &halUartConfig, &hwConfig, HAL_UART_TASK_CREATE_FLAG_SEND_RECV);
  1447. HAL_UART_RecvFlowControl(false);
  1448. }
  1449. /**
  1450. \fn INT32 AdcGetRes(UINT32 NTCvalue)
  1451. \param[in] req : NTCvalue
  1452. \brief
  1453. \return Resvalue
  1454. */
  1455. static INT32 AdcGetRes(UINT32 NTCvalue){
  1456. UINT32 Resvalue;
  1457. if(NTCvalue>=(ADC_ChannelAioVbat-10))
  1458. Resvalue=1000000;
  1459. else{
  1460. Resvalue=(long long)ADC_ChannelAioRes*(long long)NTCvalue/(ADC_ChannelAioVbat-NTCvalue);
  1461. }
  1462. return Resvalue;
  1463. }
  1464. /**
  1465. \fn INT32 AdcGetRes(UINT32 NTCvalue)
  1466. \param[in] req : NTCvalue
  1467. \brief
  1468. \return Resvalue
  1469. */
  1470. static INT32 AdcGetResFromInres(UINT32 NTCvalue){
  1471. UINT32 Resvalue,ResvalueCount;
  1472. if(NTCvalue>=(ADC_ChannelAioVbat-10))
  1473. ResvalueCount=1000000;
  1474. else{
  1475. ResvalueCount=ADC_ChannelAioRes*NTCvalue/(ADC_ChannelAioVbat-NTCvalue);
  1476. }
  1477. #ifdef USING_PRINTF
  1478. //printf("%s[%d][%d][%d]\r\n",__FUNCTION__, __LINE__,ADC_InsideRES,ResvalueCount);
  1479. #endif
  1480. if(ResvalueCount>=ADC_InsideRES)
  1481. Resvalue=1000000;
  1482. else
  1483. Resvalue=(long long)ADC_InsideRES*(long long)ResvalueCount/(ADC_InsideRES-ResvalueCount);
  1484. #ifdef USING_PRINTF
  1485. //printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,Resvalue);
  1486. #endif
  1487. return Resvalue;
  1488. }
  1489. /**
  1490. \fn INT32 AdcVbatCali(UINT32 NTCvalue)
  1491. \param[in] req : NTCvalue
  1492. \brief
  1493. \return Resvalue
  1494. */
  1495. static INT32 AdcVbatCali(UINT32 NTCvalue){
  1496. UINT32 Resvalue;
  1497. if(NTCvalue>=(ADC_ChannelAioVbat-10))
  1498. Resvalue=1000000;
  1499. else{
  1500. Resvalue=(long long)(ADC_ChannelAioRes+ADC_CALIBRATION_VALUE)*(long long)NTCvalue/ADC_CALIBRATION_VALUE; //ADC_ChannelAioRes*NTCvalue/(ADC_ChannelAioVbat-NTCvalue);
  1501. }
  1502. if(Resvalue<1300&&Resvalue>1100)
  1503. ADC_ChannelAioVbat=Resvalue;
  1504. return Resvalue;
  1505. }
  1506. /**
  1507. \fn INT32 AdcInresCali(UINT32 NTCvalue)
  1508. \param[in] req : NTCvalue
  1509. \brief
  1510. \return Resvalue
  1511. */
  1512. static INT32 AdcInresCali(UINT32 NTCvalue){
  1513. UINT32 Resvalue,ResvalueCount;
  1514. if(NTCvalue>=(ADC_ChannelAioVbat-10))
  1515. ResvalueCount=1000000;
  1516. else{
  1517. ResvalueCount=ADC_ChannelAioRes*NTCvalue/(ADC_ChannelAioVbat-NTCvalue);
  1518. }
  1519. #ifdef USING_PRINTF
  1520. //printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,ResvalueCount);
  1521. #endif
  1522. if(ResvalueCount>=ADC_CALIBRATION_VALUE)
  1523. Resvalue=1000000;
  1524. else
  1525. Resvalue=(long long)ADC_CALIBRATION_VALUE*(long long)ResvalueCount/(ADC_CALIBRATION_VALUE-ResvalueCount);
  1526. if(Resvalue>=200000&&Resvalue<1000000)
  1527. ADC_InsideRES=Resvalue;
  1528. return Resvalue;
  1529. }
  1530. /**
  1531. \fn INT32 AdcSendReq(UINT32 req,UINT32 * param ,UINT32 timeout)
  1532. \param[in] req : ADC_REQ_BITMAP_VBAT ADC_REQ_BITMAP_TEMP; timeout = 0 at irq ,otherwize equal to ADC_MSG_TIMEOUT
  1533. \brief return bat value ,trigger deinit
  1534. \return 1 FAIL , 0 OK
  1535. */
  1536. INT32 AdcSendReq(UINT32 req,UINT32 * param , UINT8 len ,UINT32 timeout)
  1537. {
  1538. INT32 ret;
  1539. adcReqMsg ReqMsg;
  1540. ReqMsg.request = req;
  1541. ReqMsg.param[NTC_Channel1] = ReqMsg.param[NTC_Channel2] = ReqMsg.param[NTC_Channel30] = ReqMsg.param[NTC_Channel31] = ReqMsg.param[NTC_Channel4] = ReqMsg.param[NTC_Channel4_InresCali] =ADC_AioResDivRatioDefault ;
  1542. ret = osMessageQueuePut(adcMsgHandle, &ReqMsg, 0, timeout);
  1543. if(ret != osOK)
  1544. {
  1545. return ret;
  1546. }
  1547. else
  1548. {
  1549. ret = osEventFlagsWait(adcTrigerHandle, ADC_RECV_CONTROL_FLAG, osFlagsWaitAll, timeout);
  1550. //to do
  1551. switch(req)
  1552. {
  1553. case ADC_REQ_BITMAP_VBAT:
  1554. param[0] = gNtcDev.NTCvalue[0];
  1555. break;
  1556. case ADC_REQ_BITMAP_TEMP:
  1557. param[0] = gNtcDev.NTCvalue[1];
  1558. break;
  1559. case ADC_REQ_BITMAP_CH1:
  1560. param[0] = AdcGetResFromInres(gNtcDev.NTCvalue[2+NTC_Channel1]);
  1561. break;
  1562. case ADC_REQ_BITMAP_CH2:
  1563. param[0] =AdcGetResFromInres(gNtcDev.NTCvalue[2+NTC_Channel2]);
  1564. break;
  1565. case ADC_REQ_BITMAP_CH30:
  1566. param[0] =AdcGetResFromInres(gNtcDev.NTCvalue[2+NTC_Channel30]);
  1567. break;
  1568. case ADC_REQ_BITMAP_CH31:
  1569. param[0] =AdcGetResFromInres(gNtcDev.NTCvalue[2+NTC_Channel31]);
  1570. break;
  1571. case ADC_REQ_BITMAP_CH4:
  1572. param[0] = gNtcDev.NTCvalue[2+NTC_Channel4]*101+600;
  1573. break;
  1574. case ADC_REQ_BITMAP_VBAT_CALI:
  1575. param[0] = AdcVbatCali(gNtcDev.NTCvalue[2+NTC_Channel4_VbatCali]);
  1576. break;
  1577. case ADC_REQ_BITMAP_INRES_CALI:
  1578. param[0] = AdcInresCali(gNtcDev.NTCvalue[2+NTC_Channel4_InresCali]);
  1579. break;
  1580. }
  1581. osEventFlagsClear(adcTrigerHandle, ADC_RECV_CONTROL_FLAG);
  1582. return ret;
  1583. }
  1584. }
  1585. /**
  1586. \fn static void ADC_VbatChannelCallback(uint32_t result)
  1587. \param[in]
  1588. \brief return bat value ,trigger deinit
  1589. \return
  1590. */
  1591. static void ADC_VbatChannelCallback(uint32_t result)
  1592. {
  1593. vbatChannelResult = result;
  1594. osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_VBAT);
  1595. }
  1596. /**
  1597. \fn static void ADC_ThermalChannelCallback(uint32_t result)
  1598. \param[in]
  1599. \brief return thermal value ,trigger deinit
  1600. \return
  1601. */
  1602. static void ADC_ThermalChannelCallback(uint32_t result)
  1603. {
  1604. thermalChannelResult = result;
  1605. osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_TEMP);
  1606. }
  1607. static void ADC_NTC1ChannelCallback(uint32_t result)
  1608. {
  1609. NTCChannelResult[NTC_Channel1] = result;
  1610. osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_CH1);
  1611. }
  1612. static void ADC_NTC2ChannelCallback(uint32_t result)
  1613. {
  1614. NTCChannelResult[NTC_Channel2] = result;
  1615. osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_CH2);
  1616. }
  1617. static void ADC_NTC30ChannelCallback(uint32_t result)
  1618. {
  1619. NTCChannelResult[NTC_Channel30] = result;
  1620. osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_CH30);
  1621. }
  1622. static void ADC_NTC31ChannelCallback(uint32_t result)
  1623. {
  1624. NTCChannelResult[NTC_Channel31] = result;
  1625. osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_CH31);
  1626. }
  1627. static void ADC_NTC4ChannelCallback(uint32_t result)
  1628. {
  1629. NTCChannelResult[NTC_Channel4] = result;
  1630. osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_CH4);
  1631. }
  1632. static void ADC_NTCVbatCaliChannelCallback(uint32_t result)
  1633. {
  1634. NTCChannelResult[NTC_Channel4_VbatCali] = result;
  1635. osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_VBAT_CALI);
  1636. }
  1637. static void ADC_NTCInresCaliChannelCallback(uint32_t result)
  1638. {
  1639. NTCChannelResult[NTC_Channel4_InresCali] = result;
  1640. osEventFlagsSet(adcEvtHandle, ADC_REQ_BITMAP_INRES_CALI);
  1641. }
  1642. /**
  1643. \fn void AdcProcess(void* arg)
  1644. \param[in]
  1645. \brief handle adc init ,deinit and convert process
  1646. \return
  1647. */
  1648. static void AdcProcess(void* arg)
  1649. {
  1650. adcReqMsg regMsg;
  1651. INT32 ret;
  1652. while(1)
  1653. {
  1654. /*
  1655. */
  1656. osMessageQueueGet(adcMsgHandle, &regMsg, 0, osWaitForever);
  1657. /*
  1658. handle event
  1659. */
  1660. adc_config_t adcConfig;
  1661. INT8 times=1;
  1662. ADC_GetDefaultConfig(&adcConfig);
  1663. osEventFlagsClear(adcEvtHandle, regMsg.request);
  1664. retry:
  1665. if(regMsg.request & ADC_REQ_BITMAP_VBAT)
  1666. {
  1667. adcConfig.channelConfig.vbatResDiv = ADC_VbatResDivRatio3Over16;
  1668. ADC_ChannelInit(ADC_ChannelVbat, ADC_UserAPP, &adcConfig, ADC_VbatChannelCallback);
  1669. //delay_us(1000*1000);
  1670. ADC_StartConversion(ADC_ChannelVbat, ADC_UserAPP);
  1671. }
  1672. else if(regMsg.request & ADC_REQ_BITMAP_TEMP)
  1673. {
  1674. adcConfig.channelConfig.thermalInput = ADC_ThermalInputVbat;
  1675. ADC_ChannelInit(ADC_ChannelThermal, ADC_UserAPP, &adcConfig, ADC_ThermalChannelCallback);
  1676. //delay_us(1000*1000);
  1677. ADC_StartConversion(ADC_ChannelThermal, ADC_UserAPP);
  1678. }
  1679. else if(regMsg.request & ADC_REQ_BITMAP_CH1)
  1680. {
  1681. if(regMsg.param[NTC_Channel1]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel1]<=ADC_AioResDivRatio1Over16){
  1682. #ifdef USING_PRINTF
  1683. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1684. #endif
  1685. adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel1];
  1686. }else{
  1687. #ifdef USING_PRINTF
  1688. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1689. #endif
  1690. adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
  1691. }
  1692. ADC_ChannelInit(ADC_ChannelAio1, ADC_UserAPP, &adcConfig, ADC_NTC1ChannelCallback);
  1693. //delay_us(1000*1000);
  1694. ADC_StartConversion(ADC_ChannelAio1, ADC_UserAPP);
  1695. }
  1696. else if(regMsg.request & ADC_REQ_BITMAP_CH2)
  1697. {
  1698. if(regMsg.param[NTC_Channel2]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel2]<=ADC_AioResDivRatio1Over16){
  1699. #ifdef USING_PRINTF
  1700. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1701. #endif
  1702. adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel2];
  1703. }else{
  1704. #ifdef USING_PRINTF
  1705. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1706. #endif
  1707. }
  1708. ADC_ChannelInit(ADC_ChannelAio2, ADC_UserAPP, &adcConfig, ADC_NTC2ChannelCallback);
  1709. //delay_us(1000*1000);
  1710. ADC_StartConversion(ADC_ChannelAio2, ADC_UserAPP);
  1711. }
  1712. else if(regMsg.request & ADC_REQ_BITMAP_CH30)
  1713. {
  1714. GPIO_PinWrite(GPIO_AIO3_SEL/16, 1<<(GPIO_AIO3_SEL%16), 0);
  1715. if(regMsg.param[NTC_Channel30]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel30]<=ADC_AioResDivRatio1Over16){
  1716. #ifdef USING_PRINTF
  1717. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1718. #endif
  1719. adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel30];
  1720. }else{
  1721. #ifdef USING_PRINTF
  1722. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1723. #endif
  1724. adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
  1725. }
  1726. ADC_ChannelInit(ADC_ChannelAio3, ADC_UserAPP, &adcConfig, ADC_NTC30ChannelCallback);
  1727. //osDelay(2000/portTICK_PERIOD_MS);
  1728. ADC_StartConversion(ADC_ChannelAio3, ADC_UserAPP);
  1729. }
  1730. else if(regMsg.request & ADC_REQ_BITMAP_CH31)
  1731. {
  1732. GPIO_PinWrite(GPIO_AIO3_SEL/16, 1<<(GPIO_AIO3_SEL%16), 1<<(GPIO_AIO3_SEL%16));
  1733. if(regMsg.param[NTC_Channel31]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel31]<=ADC_AioResDivRatio1Over16){
  1734. #ifdef USING_PRINTF
  1735. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1736. #endif
  1737. adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel31];
  1738. }else{
  1739. #ifdef USING_PRINTF
  1740. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1741. #endif
  1742. adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
  1743. }
  1744. ADC_ChannelInit(ADC_ChannelAio3, ADC_UserAPP, &adcConfig, ADC_NTC31ChannelCallback);
  1745. //osDelay(2000/portTICK_PERIOD_MS);
  1746. ADC_StartConversion(ADC_ChannelAio3, ADC_UserAPP);
  1747. }
  1748. else if(regMsg.request & ADC_REQ_BITMAP_CH4)
  1749. {
  1750. GPIO_PinWrite(GPIO_AIO4_SEL/16, 1<<(GPIO_AIO4_SEL%16), 0);
  1751. ADC_GetDefaultConfig(&adcConfig);
  1752. adcConfig.channelConfig.thermalInput = ADC_ThermalInputAio4;
  1753. ADC_ChannelInit(ADC_ChannelThermal, ADC_UserAPP, &adcConfig, ADC_NTC4ChannelCallback);
  1754. osDelay(100/portTICK_PERIOD_MS); //zhengchao 20210312
  1755. ADC_StartConversion(ADC_ChannelThermal, ADC_UserAPP);
  1756. }
  1757. else if(regMsg.request & ADC_REQ_BITMAP_VBAT_CALI)
  1758. {
  1759. GPIO_PinWrite(GPIO_AIO4_SEL/16, 1<<(GPIO_AIO4_SEL%16), 1<<(GPIO_AIO4_SEL%16));
  1760. ADC_GetDefaultConfig(&adcConfig);
  1761. adcConfig.channelConfig.thermalInput = ADC_ThermalInputAio4;
  1762. ADC_ChannelInit(ADC_ChannelThermal, ADC_UserAPP, &adcConfig, ADC_NTCVbatCaliChannelCallback);
  1763. //osDelay(2000/portTICK_PERIOD_MS);
  1764. ADC_StartConversion(ADC_ChannelThermal, ADC_UserAPP);
  1765. }
  1766. else if(regMsg.request & ADC_REQ_BITMAP_INRES_CALI)
  1767. {
  1768. GPIO_PinWrite(GPIO_AIO4_SEL/16, 1<<(GPIO_AIO4_SEL%16), 1<<(GPIO_AIO4_SEL%16));
  1769. if(regMsg.param[NTC_Channel4_InresCali]>=ADC_AioResDivRatio1 && regMsg.param[NTC_Channel4_InresCali]<=ADC_AioResDivRatio1Over16){
  1770. #ifdef USING_PRINTF
  1771. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1772. #endif
  1773. adcConfig.channelConfig.aioResDiv = regMsg.param[NTC_Channel4_InresCali];
  1774. }else{
  1775. #ifdef USING_PRINTF
  1776. //printf("%s[%d]\r\n",__FUNCTION__, __LINE__);
  1777. #endif
  1778. adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatioDefault;
  1779. }
  1780. ADC_ChannelInit(ADC_ChannelAio4, ADC_UserAPP, &adcConfig, ADC_NTCInresCaliChannelCallback);
  1781. //osDelay(2000/portTICK_PERIOD_MS);
  1782. ADC_StartConversion(ADC_ChannelAio4, ADC_UserAPP);
  1783. }
  1784. ret = osEventFlagsWait(adcEvtHandle, regMsg.request, osFlagsWaitAll, ADC_GET_RESULT_TIMOUT);
  1785. if(regMsg.request & ADC_REQ_BITMAP_VBAT)
  1786. {
  1787. ADC_ChannelDeInit(ADC_ChannelVbat, ADC_UserAPP);
  1788. gNtcDev.NTCvalue[0] = HAL_ADC_CalibrateRawCode(vbatChannelResult) * 16 / 3;
  1789. }
  1790. else if(regMsg.request & ADC_REQ_BITMAP_TEMP)
  1791. {
  1792. ADC_ChannelDeInit(ADC_ChannelThermal, ADC_UserAPP);
  1793. gNtcDev.NTCvalue[1] = HAL_ADC_ConvertThermalRawCodeToTemperature(thermalChannelResult);
  1794. }
  1795. else if(regMsg.request & ADC_REQ_BITMAP_CH1)
  1796. {
  1797. ADC_ChannelDeInit(ADC_ChannelAio1, ADC_UserAPP);
  1798. if(times==1){
  1799. gNtcDev.NTCvalue[2+NTC_Channel1]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel1])*REV_AioResDivRatioDefault;
  1800. #ifdef USING_PRINTF
  1801. //printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel1]);
  1802. #endif
  1803. if(gNtcDev.NTCvalue[2+NTC_Channel1]>(NTC_FullAioValue-10)){
  1804. regMsg.param[NTC_Channel1]=ADC_AioResDivRatioExtra;
  1805. times++;
  1806. goto retry;
  1807. }
  1808. }else{
  1809. gNtcDev.NTCvalue[2+NTC_Channel1]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel1])*REV_AioResDivRatioExtra;
  1810. }
  1811. }
  1812. else if(regMsg.request & ADC_REQ_BITMAP_CH2)
  1813. {
  1814. ADC_ChannelDeInit(ADC_ChannelAio2, ADC_UserAPP);
  1815. if(times==1){
  1816. gNtcDev.NTCvalue[2+NTC_Channel2]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel2])*REV_AioResDivRatioDefault;
  1817. #ifdef USING_PRINTF
  1818. //printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel2]);
  1819. #endif
  1820. if(gNtcDev.NTCvalue[2+NTC_Channel2]>(NTC_FullAioValue-10)){
  1821. regMsg.param[NTC_Channel2]=ADC_AioResDivRatioExtra;
  1822. times++;
  1823. goto retry;
  1824. }
  1825. }else{
  1826. gNtcDev.NTCvalue[2+NTC_Channel2]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel2])*REV_AioResDivRatioExtra;
  1827. }
  1828. }
  1829. else if(regMsg.request & ADC_REQ_BITMAP_CH30)
  1830. {
  1831. GPIO_PinWrite(GPIO_AIO3_SEL/16, 1<<(GPIO_AIO3_SEL%16), 1<<(GPIO_AIO3_SEL%16));
  1832. ADC_ChannelDeInit(ADC_ChannelAio3, ADC_UserAPP);
  1833. if(times==1){
  1834. gNtcDev.NTCvalue[2+NTC_Channel30]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel30])*REV_AioResDivRatioDefault;
  1835. #ifdef USING_PRINTF
  1836. //printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel30]);
  1837. #endif
  1838. if(gNtcDev.NTCvalue[2+NTC_Channel30]>(NTC_FullAioValue-10)){
  1839. regMsg.param[NTC_Channel30]=ADC_AioResDivRatioExtra;
  1840. times++;
  1841. goto retry;
  1842. }
  1843. }else{
  1844. gNtcDev.NTCvalue[2+NTC_Channel30]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel30])*REV_AioResDivRatioExtra;
  1845. }
  1846. }
  1847. else if(regMsg.request & ADC_REQ_BITMAP_CH31)
  1848. {
  1849. GPIO_PinWrite(GPIO_AIO3_SEL/16, 1<<(GPIO_AIO3_SEL%16), 0);
  1850. ADC_ChannelDeInit(ADC_ChannelAio3, ADC_UserAPP);
  1851. if(times==1){
  1852. gNtcDev.NTCvalue[2+NTC_Channel31]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel31])*REV_AioResDivRatioDefault;
  1853. #ifdef USING_PRINTF
  1854. //printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel31]);
  1855. #endif
  1856. if(gNtcDev.NTCvalue[2+NTC_Channel31]>(NTC_FullAioValue-10)){
  1857. regMsg.param[NTC_Channel31]=ADC_AioResDivRatioExtra;
  1858. times++;
  1859. goto retry;
  1860. }
  1861. }else{
  1862. gNtcDev.NTCvalue[2+NTC_Channel31]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel31])*REV_AioResDivRatioExtra;
  1863. }
  1864. }
  1865. else if(regMsg.request & ADC_REQ_BITMAP_CH4)
  1866. {
  1867. GPIO_PinWrite(GPIO_AIO4_SEL/16, 1<<(GPIO_AIO4_SEL%16), 1<<(GPIO_AIO4_SEL%16));
  1868. ADC_ChannelDeInit(ADC_ChannelThermal, ADC_UserAPP);
  1869. gNtcDev.NTCvalue[2+NTC_Channel4]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel4]);
  1870. }
  1871. else if(regMsg.request & ADC_REQ_BITMAP_VBAT_CALI)
  1872. {
  1873. GPIO_PinWrite(GPIO_AIO4_SEL/16, 1<<(GPIO_AIO4_SEL%16), 0);
  1874. ADC_ChannelDeInit(ADC_ChannelThermal, ADC_UserAPP);
  1875. if(times==1){
  1876. gNtcDev.NTCvalue[2+NTC_Channel4_VbatCali]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel4_VbatCali]);
  1877. #ifdef USING_PRINTF
  1878. //printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel4_VbatCali]);
  1879. #endif
  1880. if(gNtcDev.NTCvalue[2+NTC_Channel4_VbatCali]>(NTC_FullAioValue-10)){
  1881. regMsg.param[NTC_Channel4_VbatCali]=ADC_AioResDivRatioExtra;
  1882. times++;
  1883. goto retry;
  1884. }
  1885. }else{
  1886. gNtcDev.NTCvalue[2+NTC_Channel4_VbatCali]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel4_VbatCali]);
  1887. }
  1888. }
  1889. else if(regMsg.request & ADC_REQ_BITMAP_INRES_CALI)
  1890. {
  1891. GPIO_PinWrite(GPIO_AIO4_SEL/16, 1<<(GPIO_AIO4_SEL%16), 0);
  1892. ADC_ChannelDeInit(ADC_ChannelAio4, ADC_UserAPP);
  1893. if(times==1){
  1894. gNtcDev.NTCvalue[2+NTC_Channel4_InresCali]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel4_InresCali])*REV_AioResDivRatioDefault;
  1895. #ifdef USING_PRINTF
  1896. //printf("%s[%d][%d]\r\n",__FUNCTION__, __LINE__,gNtcDev.NTCvalue[2+NTC_Channel4_InresCali]);
  1897. #endif
  1898. if(gNtcDev.NTCvalue[2+NTC_Channel4_InresCali]>(NTC_FullAioValue-10)){
  1899. regMsg.param[NTC_Channel4_InresCali]=ADC_AioResDivRatioExtra;
  1900. times++;
  1901. goto retry;
  1902. }
  1903. }else{
  1904. gNtcDev.NTCvalue[2+NTC_Channel4_InresCali]= HAL_ADC_CalibrateRawCode(NTCChannelResult[NTC_Channel4_InresCali])*REV_AioResDivRatioExtra;
  1905. }
  1906. }
  1907. osEventFlagsSet(adcTrigerHandle, ADC_RECV_CONTROL_FLAG);
  1908. }
  1909. }
  1910. /**
  1911. \fn INT32 AdcTaskInit(void)
  1912. \param[in]
  1913. \brief create task for checking bat level
  1914. \return
  1915. */
  1916. INT32 AdcTaskInit(void)
  1917. {
  1918. gpio_pin_config_t config;
  1919. config.pinDirection = GPIO_DirectionOutput;
  1920. config.misc.initOutput = 1;
  1921. pad_config_t padConfig;
  1922. PAD_GetDefaultConfig(&padConfig);
  1923. //power
  1924. padConfig.mux = PAD_MuxAlt0;
  1925. PAD_SetPinConfig(11, &padConfig);
  1926. GPIO_PinConfig(0, 0, &config);
  1927. GPIO_PinWrite(0, 1, 1);
  1928. padConfig.mux = PAD_MuxAlt7;
  1929. PAD_SetPinConfig(9, &padConfig);
  1930. PAD_SetPinConfig(10, &padConfig);
  1931. GPIO_PinConfig(GPIO_AIO3_SEL/16, GPIO_AIO3_SEL%16, &config);
  1932. GPIO_PinConfig(GPIO_AIO4_SEL/16, GPIO_AIO4_SEL%16, &config);
  1933. GPIO_PinWrite(GPIO_AIO3_SEL/16, 1<<(GPIO_AIO3_SEL%16), 0);
  1934. GPIO_PinWrite(GPIO_AIO4_SEL/16, 1<<(GPIO_AIO4_SEL%16), 0);
  1935. memset(&gNtcDev , 0 ,sizeof(NtcResult_t));
  1936. if(adcMsgHandle == NULL)
  1937. {
  1938. adcMsgHandle = osMessageQueueNew(ADC_MSG_MAX_NUM,sizeof(adcReqMsg), NULL);
  1939. if(adcMsgHandle == NULL)
  1940. return 1;
  1941. }
  1942. if(adcTrigerHandle == NULL)
  1943. {
  1944. adcTrigerHandle = osEventFlagsNew(NULL);
  1945. if(adcTrigerHandle == NULL)
  1946. return 1;
  1947. }
  1948. if(adcEvtHandle == NULL)
  1949. {
  1950. adcEvtHandle = osEventFlagsNew(NULL);
  1951. if(adcEvtHandle == NULL)
  1952. return 1;
  1953. }
  1954. if(adcTaskHandle == NULL)
  1955. {
  1956. osThreadAttr_t task_attr;
  1957. memset(&task_attr , 0 , sizeof(task_attr));
  1958. task_attr.name = "batAdc";
  1959. task_attr.priority = osPriorityNormal;
  1960. task_attr.cb_mem = &adcTask;
  1961. task_attr.cb_size = sizeof(StaticTask_t);
  1962. task_attr.stack_mem = adcTaskStack;
  1963. task_attr.stack_size =ADC_TASK_STACK_SIZE;
  1964. memset(& adcTaskStack, 0xa5, ADC_TASK_STACK_SIZE);
  1965. adcTaskHandle = osThreadNew(AdcProcess , NULL,&task_attr);
  1966. if(adcTaskHandle == NULL)
  1967. return 1;
  1968. }
  1969. return 0;
  1970. }
  1971. /**
  1972. \fn void PowerPinConfig(IOType iotype)
  1973. \param[in]
  1974. \brief config PWR pin to gpiol
  1975. \return
  1976. */
  1977. void PowerPinConfig(IOType iotype)
  1978. {
  1979. gpio_pin_config_t config;
  1980. config.pinDirection = GPIO_DirectionOutput;
  1981. config.misc.initOutput = 1;
  1982. pad_config_t padConfig;
  1983. PAD_GetDefaultConfig(&padConfig);
  1984. if(iotype == AON_IO)
  1985. {
  1986. slpManAONIOVoltSet(IOVOLT_3_30V);//zhengchao 20200412 add
  1987. padConfig.mux = PAD_MuxAlt0;
  1988. PAD_SetPinConfig(35, &padConfig);
  1989. GPIO_PinConfig(1, AON_GPS_POWER1, &config);
  1990. GPIO_PinWrite(1, 1 << AON_GPS_POWER1, 0);
  1991. PAD_SetPinConfig(31, &padConfig);
  1992. GPIO_PinConfig(1, AON_GPS_POWER2, &config);
  1993. GPIO_PinWrite(1, 1 << AON_GPS_POWER2, 1 << AON_GPS_POWER2);
  1994. PAD_SetPinConfig(32, &padConfig);
  1995. GPIO_PinConfig(1, AON_RELAY_DRV, &config);
  1996. GPIO_PinWrite(1, 1 << AON_RELAY_DRV, 0 << AON_RELAY_DRV); //zhengchao 20200412 modify 1-->0
  1997. PAD_SetPinConfig(35, &padConfig);
  1998. GPIO_PinConfig(1, AON_WAKEUP, &config);
  1999. GPIO_PinWrite(1, 1 << AON_WAKEUP, 1 << AON_WAKEUP);
  2000. padConfig.mux = PAD_MuxAlt7;
  2001. PAD_SetPinConfig(5, &padConfig);
  2002. GPIO_PinConfig(1, FEM_GPS_RSTN, &config);
  2003. GPIO_PinWrite(1, 1 << FEM_GPS_RSTN, 1 << FEM_GPS_RSTN);
  2004. #if 1
  2005. padConfig.mux = PAD_MuxAlt7;
  2006. padConfig.pullSelect = PAD_PullInternal;
  2007. padConfig.pullUpEnable = PAD_PullUpEnable;
  2008. padConfig.pullDownEnable = PAD_PullDownDisable;
  2009. PAD_SetPinConfig(8, &padConfig);
  2010. config.pinDirection = GPIO_DirectionInput;
  2011. config.misc.initOutput = 0;
  2012. GPIO_PinConfig(1, FEM_GPS_PPS, &config);
  2013. #else
  2014. padConfig.mux = PAD_MuxAlt7;
  2015. PAD_SetPinConfig(8, &padConfig);
  2016. GPIO_PinWrite(1, 1 << FEM_GPS_PPS, 1 << FEM_GPS_PPS);
  2017. #endif
  2018. }
  2019. else
  2020. {
  2021. /*Normal IO*/
  2022. #if 0
  2023. GPIO_PinConfig(0, GPIO_MOS_DRV1, &config);
  2024. GPIO_PinWrite(0, 1 << GPIO_MOS_DRV1, 1 << GPIO_MOS_DRV1);
  2025. GPIO_PinConfig(0, GPIO_MOS_DRV2, &config);
  2026. GPIO_PinWrite(0, 1 << GPIO_MOS_DRV2, 1 << GPIO_MOS_DRV2);
  2027. #endif
  2028. padConfig.mux = PAD_MuxAlt0;
  2029. PAD_SetPinConfig(28, &padConfig);
  2030. GPIO_PinConfig(0, GPIO_POWER_LED, &config);
  2031. GPIO_PinWrite(0, 1 << GPIO_POWER_LED, 1 << GPIO_POWER_LED);
  2032. }
  2033. }
  2034. /**
  2035. \fn void relayConfigInit(void)
  2036. \param[in]
  2037. \brief init the relay, while switch on default
  2038. \return
  2039. */
  2040. void relayConfigInit()
  2041. {
  2042. gpio_pin_config_t config;
  2043. config.pinDirection = GPIO_DirectionOutput;
  2044. config.misc.initOutput = 1;
  2045. pad_config_t padConfig;
  2046. PAD_GetDefaultConfig(&padConfig);
  2047. PAD_SetPinConfig(32, &padConfig);
  2048. GPIO_PinConfig(1, AON_RELAY_DRV, &config);
  2049. GPIO_PinWrite(1, 1 << AON_RELAY_DRV, 0 << AON_RELAY_DRV); //the relay default is off(disconnected)
  2050. printf("switch off\n");
  2051. }
  2052. /**
  2053. \fn void relayControl(BOOL onOrOff)
  2054. \param[in] onOrOff
  2055. \brief switch the relay on or off
  2056. \return
  2057. */
  2058. void relayControl(BOOL onOrOff)
  2059. {
  2060. if(onOrOff == TRUE)
  2061. {
  2062. GPIO_PinWrite(1, 1 << AON_RELAY_DRV, 1 << AON_RELAY_DRV); //switch on
  2063. printf("switcht on\n");
  2064. }
  2065. else
  2066. {
  2067. GPIO_PinWrite(1, 1 << AON_RELAY_DRV, 0 << AON_RELAY_DRV); //switch off
  2068. printf("switch off\n");
  2069. }
  2070. }
  2071. /**
  2072. \fn void posGGAReset(void)
  2073. \param[in]
  2074. \brief reset gps
  2075. \return
  2076. */
  2077. void posGGAReset(void)
  2078. {
  2079. gpio_pin_config_t config;
  2080. config.pinDirection = GPIO_DirectionOutput;
  2081. config.misc.initOutput = 1;
  2082. pad_config_t padConfig;
  2083. PAD_GetDefaultConfig(&padConfig);
  2084. padConfig.mux = PAD_MuxAlt7;
  2085. PAD_SetPinConfig(5, &padConfig);
  2086. GPIO_PinConfig(1, FEM_GPS_RSTN, &config);
  2087. GPIO_PinWrite(1, 1 << FEM_GPS_RSTN, 0);
  2088. osDelay(1000/portTICK_PERIOD_MS);
  2089. GPIO_PinConfig(1, FEM_GPS_RSTN, &config);
  2090. GPIO_PinWrite(1, 1 << FEM_GPS_RSTN, 1 << FEM_GPS_RSTN);
  2091. config.pinDirection = GPIO_DirectionInput;
  2092. config.misc.initOutput = 0;
  2093. GPIO_PinConfig(1, FEM_GPS_RSTN, &config);
  2094. }
  2095. /**
  2096. \fn void GPSPowerCtr(bool )
  2097. \param[in]
  2098. \brief reset gps
  2099. \return
  2100. */
  2101. void GPSPowerCtr(bool on)
  2102. {
  2103. gpio_pin_config_t config;
  2104. config.pinDirection = GPIO_DirectionOutput;
  2105. config.misc.initOutput = 1;
  2106. pad_config_t padConfig;
  2107. PAD_GetDefaultConfig(&padConfig);
  2108. padConfig.mux = PAD_MuxAlt0;
  2109. PAD_SetPinConfig(35, &padConfig);
  2110. GPIO_PinConfig(1, AON_GPS_POWER1, &config);
  2111. PAD_SetPinConfig(31, &padConfig);
  2112. GPIO_PinConfig(1, AON_GPS_POWER2, &config);
  2113. if(on){
  2114. GPIO_PinWrite(1, 1 << AON_GPS_POWER2, 0);
  2115. GPIO_PinWrite(1, 1 << AON_GPS_POWER1, 1 << AON_GPS_POWER1);
  2116. }else{
  2117. GPIO_PinWrite(1, 1 << AON_GPS_POWER2, 1<<AON_GPS_POWER2);
  2118. GPIO_PinWrite(1, 1 << AON_GPS_POWER1, 0);
  2119. }
  2120. }
  2121. /**
  2122. \fn void posGGAServiceStart(QueueHandle_t handle)
  2123. \param[in]
  2124. \brief powr on gps
  2125. \return
  2126. */
  2127. INT32 posGGAServiceStart(QueueHandle_t handle)
  2128. {
  2129. if(handle == NULL){
  2130. return -1;
  2131. }else{
  2132. GPSPowerCtr(true);
  2133. gpsHandle = handle;
  2134. return 0;
  2135. }
  2136. }
  2137. /**
  2138. \fn void posGGAServiceStop(void )
  2139. \param[in]
  2140. \brief stop gps
  2141. \return
  2142. */
  2143. void posGGAServiceStop( void)
  2144. {
  2145. GPSPowerCtr(false);
  2146. gpsHandle = NULL;
  2147. }
  2148. BOOL NB_ADC_Get(UINT32* adcValue, ADC_CHANNEL_TYPE adcChannel)
  2149. {
  2150. //UINT32 NTCR2,NTCR3,NTCR4,NTCR5,Vbat = 0;
  2151. //*adcValue = 0xFFFFFFFF;
  2152. INT32 ret = 1;
  2153. switch(adcChannel)
  2154. {
  2155. case FAST_CHARGE_TEMP: //P2-7
  2156. ret = AdcSendReq(ADC_REQ_BITMAP_CH1,adcValue,01,ADC_GET_RESULT_TIMOUT);
  2157. break;
  2158. case NORMAL_CHARGE_TEMP: //P2-9
  2159. ret = AdcSendReq(ADC_REQ_BITMAP_CH2,adcValue,01,ADC_GET_RESULT_TIMOUT);
  2160. break;
  2161. case OTHER_TEMP_1: //P2-11
  2162. ret = AdcSendReq(ADC_REQ_BITMAP_CH31,adcValue,01,ADC_GET_RESULT_TIMOUT);
  2163. break;
  2164. case OTHER_TEMP_2: //P2-13
  2165. ret = AdcSendReq(ADC_REQ_BITMAP_CH30,adcValue,01,ADC_GET_RESULT_TIMOUT);
  2166. break;
  2167. case VBAT: //Vbat
  2168. ret = AdcSendReq(ADC_REQ_BITMAP_CH4,adcValue,01,ADC_GET_RESULT_TIMOUT);
  2169. break;
  2170. default:
  2171. break;
  2172. }
  2173. if(ret == 0)
  2174. return TRUE;
  2175. else
  2176. return FALSE;
  2177. }
  2178. UINT8 LookUpRTtable(UINT32 R_value)
  2179. {
  2180. UINT8 Temp_Table1[23] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22};
  2181. UINT8 Temp_Table2[217] = {23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
  2182. 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,
  2183. 84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,
  2184. 115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,
  2185. 142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,
  2186. 169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,
  2187. 196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,
  2188. 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239};
  2189. UINT32 R_Table1[23] = {202269,191063,180554,170694,161438,152746,144580,136905,129687,122898,116508,
  2190. 110493,104827,99488,94455,89710,85233,81008,77019,73252,69693,66329,63148};
  2191. UINT16 R_Table2[217] = {
  2192. 60140,57293,54599,52049,49633,47343,45174,43117,41166,39315,37558,35891,34307,32802,31373,
  2193. 30014,28722,27493,26324,25211,24152,23144,22183,21268,20395,19564,18771,18015,17293,16604,
  2194. 15947,15319,14720,14147,13600,13077,12577,12098,11641,11203,10784,10383,10000,9632,9280,8942,
  2195. 8619,8309,8012,7727,7454,7191,6940,6698,6466,6244,6030,5825,5627,5438,5255,5080,4911,4749,4593,
  2196. 4443,4299,4160,4026,3898,3773,3654,3539,3428,3321,3218,3119,3023,2931,2841,2755,2672,2592,2515,
  2197. 2441,2369,2299,2232,2167,2104,2044,1985,1928,1874,1821,1769,1720,1672,1626,1581,1537,1495,1455,
  2198. 1415,1377,1340,1305,1270,1236,1204,1172,1142,1112,1083,1056,1029,1002,977,952,928,905,883,861,
  2199. 839,819,799,779,760,742,724,707,690,674,658,642,627,613,599,585,571,558,546,533,521,509,498,487,
  2200. 476,466,455,445,436,426,417,408,399,391,382,374,366,359,351,344,337,330,323,316,310,304,298,292,
  2201. 286,280,274,269,264,259,254,249,244,239,234,230,226,221,217,213,209,205,201,198,194,190,187,183,
  2202. 180,177,174,171,168,165,162,159,156,153,151,148,145,143,141,138,136,133,131,129,127,125};
  2203. if(R_value>R_Table2[0])
  2204. {
  2205. if(R_value<=R_Table1[22])//判断是否超出表尾
  2206. {
  2207. return Temp_Table1[22];
  2208. }
  2209. else if(R_value>=R_Table1[0])//判断是否超出表头
  2210. {
  2211. return Temp_Table1[0];
  2212. }
  2213. else
  2214. {
  2215. for(int i=0;i<23-1;i++)
  2216. {
  2217. if ((R_value<=R_Table1[i])&&(R_value>R_Table1[i+1]))//中间判断
  2218. {
  2219. return Temp_Table1[i];
  2220. }
  2221. else
  2222. {
  2223. continue;
  2224. }
  2225. }
  2226. }
  2227. }//R-1
  2228. else
  2229. {
  2230. if(R_value<=R_Table2[216])//判断是否超出表尾
  2231. {
  2232. return Temp_Table2[216];
  2233. }
  2234. else if(R_value>=R_Table2[0])//判断是否超出表头
  2235. {
  2236. return Temp_Table2[0];
  2237. }
  2238. else
  2239. {
  2240. for(int i=0;i<217-1;i++)
  2241. {
  2242. if ((R_value<R_Table2[i])&&(R_value>=R_Table2[i+1]))//中间判断
  2243. {
  2244. return Temp_Table2[i+1];
  2245. }
  2246. else
  2247. {
  2248. continue;
  2249. }
  2250. }
  2251. }
  2252. }//R-2
  2253. }