123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- #include "hal_board_cfg.h"
- #include "hal_dma.h"
- #include "hal_flash.h"
- #include "hal_mcu.h"
- #include "hal_types.h"
- void HalFlashRead(uint8 pg, uint16 offset, uint8 *buf, uint16 cnt)
- {
-
- uint8 *pData = (uint8 *)(offset + HAL_FLASH_PAGE_MAP) +
- ((pg % HAL_FLASH_PAGE_PER_BANK) * HAL_FLASH_PAGE_SIZE);
- uint8 memctr = MEMCTR;
- #if (!defined HAL_OAD_BOOT_CODE) && (!defined HAL_OTA_BOOT_CODE)
- halIntState_t is;
- #endif
- pg /= HAL_FLASH_PAGE_PER_BANK;
- #if (!defined HAL_OAD_BOOT_CODE) && (!defined HAL_OTA_BOOT_CODE)
- HAL_ENTER_CRITICAL_SECTION(is);
- #endif
-
- MEMCTR = (MEMCTR & 0xF8) | pg;
- while (cnt--)
- {
- *buf++ = *pData++;
- }
- MEMCTR = memctr;
- #if (!defined HAL_OAD_BOOT_CODE) && (!defined HAL_OTA_BOOT_CODE)
- HAL_EXIT_CRITICAL_SECTION(is);
- #endif
- }
- void HalFlashWrite(uint16 addr, uint8 *buf, uint16 cnt)
- {
- #if (defined HAL_DMA) && (HAL_DMA == TRUE)
- halDMADesc_t *ch = HAL_NV_DMA_GET_DESC();
- HAL_DMA_SET_SOURCE(ch, buf);
- HAL_DMA_SET_DEST(ch, &FWDATA);
- HAL_DMA_SET_VLEN(ch, HAL_DMA_VLEN_USE_LEN);
- HAL_DMA_SET_LEN(ch, (cnt * HAL_FLASH_WORD_SIZE));
- HAL_DMA_SET_WORD_SIZE(ch, HAL_DMA_WORDSIZE_BYTE);
- HAL_DMA_SET_TRIG_MODE(ch, HAL_DMA_TMODE_SINGLE);
- HAL_DMA_SET_TRIG_SRC(ch, HAL_DMA_TRIG_FLASH);
- HAL_DMA_SET_SRC_INC(ch, HAL_DMA_SRCINC_1);
- HAL_DMA_SET_DST_INC(ch, HAL_DMA_DSTINC_0);
-
- HAL_DMA_SET_IRQ(ch, HAL_DMA_IRQMASK_DISABLE);
- HAL_DMA_SET_M8( ch, HAL_DMA_M8_USE_8_BITS);
- HAL_DMA_SET_PRIORITY(ch, HAL_DMA_PRI_HIGH);
- HAL_DMA_CLEAR_IRQ(HAL_NV_DMA_CH);
- HAL_DMA_ARM_CH(HAL_NV_DMA_CH);
- FADDRL = (uint8)addr;
- FADDRH = (uint8)(addr >> 8);
- FCTL |= 0x02;
- while (FCTL & 0x80);
- #endif
- }
- void HalFlashErase(uint8 pg)
- {
- FADDRH = pg * (HAL_FLASH_PAGE_SIZE / HAL_FLASH_WORD_SIZE / 256);
- FCTL |= 0x01;
- }
|