bsp_cm.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "include.h"
  2. #include "bsp_param.h"
  3. #define TRACE_EN 0
  4. #if TRACE_EN
  5. #define TRACE(...) printf(__VA_ARGS__)
  6. #else
  7. #define TRACE(...)
  8. #endif
  9. #define CM_SIZE 0x2000 //参数区至少8k
  10. #define CM_START (FLASH_SIZE - CM_SIZE)
  11. void param_sync_hook(void);
  12. u32 bsp_get_rand_key(void);
  13. typedef void (*param_write_func)(u8 *buf, u32 addr, uint len);
  14. typedef void (*param_read_func)(u8 *buf, u32 addr, uint len);
  15. ///CM Init时,判断该Page参数是否有效,有效则加载
  16. bool cm_loadparam(void *buff, uint page)
  17. {
  18. return true;
  19. }
  20. ///CM Init时,如果找不到有效的参数,则进行出厂值设置
  21. void cm_factory(void *buff, uint page)
  22. {
  23. u8 *buf = buff;
  24. memset(buf, 0, 250);
  25. TRACE("cm_factory: %d\n", page);
  26. if (page == SYS_CM_PAGE_NUM) {
  27. //系统参数初始化
  28. sys_cb.vol = SYS_INIT_VOLUME + 1;
  29. if (xcfg_cb.lang_id == LANG_EN_ZH) {
  30. sys_cb.lang_id = 0; //出厂默认英文
  31. } else if (xcfg_cb.lang_id == LANG_ZH_EN) {
  32. sys_cb.lang_id = 1; //出厂默认中文
  33. } else {
  34. sys_cb.lang_id = xcfg_cb.lang_id;
  35. }
  36. buf[PARAM_SYS_VOL] = sys_cb.vol;
  37. if (sys_cb.lang_id) {
  38. buf[PARAM_LANG_ID] = BIT(3);
  39. }
  40. PUT_LE32(buf + PARAM_RANDOM_KEY, sys_cb.rand_seed);
  41. }
  42. }
  43. void cm_param_init(void)
  44. {
  45. param_cb.read = (param_read_func)cm_read;
  46. param_cb.write = (param_write_func)cm_write;
  47. param_cb.sync = cm_sync;
  48. cm_init(MAX_CM_PAGE, CM_START, CM_SIZE);
  49. sys_cb.cm_factory = 0;
  50. }