flash_a.h
Go to the documentation of this file.
1 #ifndef __FLASH_A_H__
2 #define __FLASH_A_H__
3 
4 //*****************************************************************************
5 //
8 //
9 //*****************************************************************************
10 
11 //*****************************************************************************
12 //
13 // If building with a C++ compiler, make all of the definitions in this header
14 // have a C binding.
15 //
16 //*****************************************************************************
17 #ifdef __cplusplus
18 extern "C"
19 {
20 #endif
21 
22 #include <msp.h>
23 #include <stdbool.h>
24 
25 //*****************************************************************************
26 //
27 // Control specific variables
28 //
29 //*****************************************************************************
30 #define FLASH_A_BURST_PRG_BIT 0x03
31 #define FLASH_A_SECTOR_SIZE 4096
32 
33 /* Interrupts */
34 #define FLASH_A_PROGRAM_ERROR FLCTL_A_IFG_PRG_ERR
35 #define FLASH_A_BENCHMARK_INT FLCTL_A_IFG_BMRK
36 #define FLASH_A_ERASE_COMPLETE FLCTL_A_IFG_ERASE
37 #define FLASH_A_BRSTPRGM_COMPLETE FLCTL_A_IFG_PRGB
38 #define FLASH_A_WRDPRGM_COMPLETE FLCTL_A_IFG_PRG
39 #define FLASH_A_POSTVERIFY_FAILED FLCTL_A_IFG_AVPST
40 #define FLASH_A_PREVERIFY_FAILED FLCTL_A_IFG_AVPRE
41 #define FLASH_A_BRSTRDCMP_COMPLETE FLCTL_A_IFG_RDBRST
42 
43 #define FLASH_A_NORMAL_READ_MODE FLCTL_A_BANK0_RDCTL_RD_MODE_0
44 #define FLASH_A_MARGIN0_READ_MODE FLCTL_A_BANK0_RDCTL_RD_MODE_1
45 #define FLASH_A_MARGIN1_READ_MODE FLCTL_A_BANK0_RDCTL_RD_MODE_2
46 #define FLASH_A_PROGRAM_VERIFY_READ_MODE FLCTL_A_BANK0_RDCTL_RD_MODE_3
47 #define FLASH_A_ERASE_VERIFY_READ_MODE FLCTL_A_BANK0_RDCTL_RD_MODE_4
48 #define FLASH_A_LEAKAGE_VERIFY_READ_MODE FLCTL_A_BANK0_RDCTL_RD_MODE_5
49 #define FLASH_A_MARGIN0B_READ_MODE FLCTL_A_BANK0_RDCTL_RD_MODE_9
50 #define FLASH_A_MARGIN1B_READ_MODE FLCTL_A_BANK0_RDCTL_RD_MODE_10
51 
52 #define FLASH_A_PRGBRSTCTLSTAT_BURSTSTATUS_COMPLETE FLCTL_A_PRGBRST_CTLSTAT_BURST_STATUS_7
53 
54 #define FLASH_A_BANK0 0x00
55 #define FLASH_A_BANK1 0x01
56 #define FLASH_A_DATA_READ 0x00
57 #define FLASH_A_INSTRUCTION_FETCH 0x01
58 
59 #define FLASH_A_MAIN_MEMORY_SPACE_BANK0 0x01
60 #define FLASH_A_MAIN_MEMORY_SPACE_BANK1 0x02
61 #define FLASH_A_INFO_MEMORY_SPACE_BANK0 0x03
62 #define FLASH_A_INFO_MEMORY_SPACE_BANK1 0x04
63 
64 #define FLASH_A_MAIN_SPACE FLCTL_A_RDBRST_CTLSTAT_MEM_TYPE_0
65 #define FLASH_A_INFO_SPACE FLCTL_A_RDBRST_CTLSTAT_MEM_TYPE_1
66 #define FLASH_A_1_PATTERN FLCTL_A_RDBRST_CTLSTAT_DATA_CMP
67 #define FLASH_A_0_PATTERN 0x00
68 
69 #define FLASH_A_SECTOR0 FLCTL_A_BANK0_MAIN_WEPROT_PROT0
70 #define FLASH_A_SECTOR1 FLCTL_A_BANK0_MAIN_WEPROT_PROT1
71 #define FLASH_A_SECTOR2 FLCTL_A_BANK0_MAIN_WEPROT_PROT2
72 #define FLASH_A_SECTOR3 FLCTL_A_BANK0_MAIN_WEPROT_PROT3
73 #define FLASH_A_SECTOR4 FLCTL_A_BANK0_MAIN_WEPROT_PROT4
74 #define FLASH_A_SECTOR5 FLCTL_A_BANK0_MAIN_WEPROT_PROT5
75 #define FLASH_A_SECTOR6 FLCTL_A_BANK0_MAIN_WEPROT_PROT6
76 #define FLASH_A_SECTOR7 FLCTL_A_BANK0_MAIN_WEPROT_PROT7
77 #define FLASH_A_SECTOR8 FLCTL_A_BANK0_MAIN_WEPROT_PROT8
78 #define FLASH_A_SECTOR9 FLCTL_A_BANK0_MAIN_WEPROT_PROT9
79 #define FLASH_A_SECTOR10 FLCTL_A_BANK0_MAIN_WEPROT_PROT10
80 #define FLASH_A_SECTOR11 FLCTL_A_BANK0_MAIN_WEPROT_PROT11
81 #define FLASH_A_SECTOR12 FLCTL_A_BANK0_MAIN_WEPROT_PROT12
82 #define FLASH_A_SECTOR13 FLCTL_A_BANK0_MAIN_WEPROT_PROT13
83 #define FLASH_A_SECTOR14 FLCTL_A_BANK0_MAIN_WEPROT_PROT14
84 #define FLASH_A_SECTOR15 FLCTL_A_BANK0_MAIN_WEPROT_PROT15
85 #define FLASH_A_SECTOR16 FLCTL_A_BANK0_MAIN_WEPROT_PROT16
86 #define FLASH_A_SECTOR17 FLCTL_A_BANK0_MAIN_WEPROT_PROT17
87 #define FLASH_A_SECTOR18 FLCTL_A_BANK0_MAIN_WEPROT_PROT18
88 #define FLASH_A_SECTOR19 FLCTL_A_BANK0_MAIN_WEPROT_PROT19
89 #define FLASH_A_SECTOR20 FLCTL_A_BANK0_MAIN_WEPROT_PROT20
90 #define FLASH_A_SECTOR21 FLCTL_A_BANK0_MAIN_WEPROT_PROT21
91 #define FLASH_A_SECTOR22 FLCTL_A_BANK0_MAIN_WEPROT_PROT22
92 #define FLASH_A_SECTOR23 FLCTL_A_BANK0_MAIN_WEPROT_PROT23
93 #define FLASH_A_SECTOR24 FLCTL_A_BANK0_MAIN_WEPROT_PROT24
94 #define FLASH_A_SECTOR25 FLCTL_A_BANK0_MAIN_WEPROT_PROT25
95 #define FLASH_A_SECTOR26 FLCTL_A_BANK0_MAIN_WEPROT_PROT26
96 #define FLASH_A_SECTOR27 FLCTL_A_BANK0_MAIN_WEPROT_PROT27
97 #define FLASH_A_SECTOR28 FLCTL_A_BANK0_MAIN_WEPROT_PROT28
98 #define FLASH_A_SECTOR29 FLCTL_A_BANK0_MAIN_WEPROT_PROT29
99 #define FLASH_A_SECTOR30 FLCTL_A_BANK0_MAIN_WEPROT_PROT30
100 #define FLASH_A_SECTOR31 FLCTL_A_BANK0_MAIN_WEPROT_PROT31
101 
102 #define FLASH_A_NOVER 0
103 #define FLASH_A_BURSTPOST FLCTL_A_PRGBRST_CTLSTAT_AUTO_PST
104 #define FLASH_A_BURSTPRE FLCTL_A_PRGBRST_CTLSTAT_AUTO_PRE
105 #define FLASH_A_REGPRE FLCTL_A_PRG_CTLSTAT_VER_PRE
106 #define FLASH_A_REGPOST FLCTL_A_PRG_CTLSTAT_VER_PST
107 #define FLASH_A_FULLVER (FLCTL_A_PRGBRST_CTLSTAT_AUTO_PST | \
108  FLCTL_A_PRGBRST_CTLSTAT_AUTO_PRE | FLCTL_A_PRG_CTLSTAT_VER_PRE \
109  | FLCTL_A_PRG_CTLSTAT_VER_PST)
110 
111 #define FLASH_A_COLLATED_WRITE_MODE 0x01
112 #define FLASH_A_IMMEDIATE_WRITE_MODE 0x02
113 
114 /* Internal parameters/definitions */
115 #define __INFO_FLASH_A_TECH_START__ 0x00200000
116 #define __INFO_FLASH_A_TECH_MIDDLE__ 0x00204000
117 
119 {
120  uint32_t B0_MAIN_R0;
121  uint32_t B0_MAIN_R1;
122  uint32_t B0_MAIN_R2;
123  uint32_t B0_MAIN_R3;
124  uint32_t B0_MAIN_R4;
125  uint32_t B0_MAIN_R5;
126  uint32_t B0_MAIN_R6;
127  uint32_t B0_MAIN_R7;
128  uint32_t B1_MAIN_R0;
129  uint32_t B1_MAIN_R1;
130  uint32_t B1_MAIN_R2;
131  uint32_t B1_MAIN_R3;
132  uint32_t B1_MAIN_R4;
133  uint32_t B1_MAIN_R5;
134  uint32_t B1_MAIN_R6;
135  uint32_t B1_MAIN_R7;
136  uint32_t B0_INFO_R0;
137  uint32_t B1_INFO_R0;
139 
140 //*****************************************************************************
141 //
142 // Prototypes for the APIs.
143 //
144 //*****************************************************************************
145 
146 //*****************************************************************************
147 //
166 //
167 //*****************************************************************************
168 extern void FlashCtl_A_getMemoryInfo(uint32_t addr, uint32_t *sectorNum,
169  uint32_t *bankNum);
170 
171 //*****************************************************************************
172 //
186 //
187 //*****************************************************************************
188 extern void FlashCtl_A_enableReadBuffering(uint_fast8_t memoryBank,
189  uint_fast8_t accessMethod);
190 
191 //*****************************************************************************
192 //
206 //
207 //*****************************************************************************
208 extern void FlashCtl_A_disableReadBuffering(uint_fast8_t memoryBank,
209  uint_fast8_t accessMethod);
210 
211 //*****************************************************************************
212 //
226 //
227 //*****************************************************************************
228 extern bool FlashCtl_A_protectMemory(uint32_t startAddr, uint32_t endAddr);
229 
230 //*****************************************************************************
231 //
245 //
246 //*****************************************************************************
247 extern bool FlashCtl_A_unprotectMemory(uint32_t startAddr, uint32_t endAddr);
248 
249 //*****************************************************************************
250 //
260 //
261 //*****************************************************************************
262 extern bool FlashCtl_A_isMemoryRangeProtected(uint32_t startAddr,
263  uint32_t endAddr);
264 
265 //*****************************************************************************
266 //
276 //
277 //*****************************************************************************
278 extern bool FlashCtl_A_isMemoryProtected(uint32_t addr);
279 
280 //*****************************************************************************
281 //
315 //
316 //*****************************************************************************
317 extern bool FlashCtl_A_verifyMemory(void* verifyAddr, uint32_t length,
318  uint_fast8_t pattern);
319 
320 //*****************************************************************************
321 //
341 //
342 //*****************************************************************************
343 extern bool FlashCtl_A_performMassErase(void);
344 
345 //*****************************************************************************
346 //
353 //
354 //*****************************************************************************
355 extern void FlashCtl_A_initiateMassErase(void);
356 
357 //*****************************************************************************
358 //
383 //
384 //*****************************************************************************
385 extern bool FlashCtl_A_eraseSector(uint32_t addr);
386 
387 //*****************************************************************************
388 //
418 //
419 //*****************************************************************************
420 extern bool FlashCtl_A_programMemory(void* src, void* dest,
421  uint32_t length);
422 
423 //*****************************************************************************
424 //
440 //
441 //*****************************************************************************
442 extern void FlashCtl_A_setProgramVerification(uint32_t verificationSetting);
443 
444 //*****************************************************************************
445 //
461 //
462 //*****************************************************************************
464  uint32_t verificationSetting);
465 
466 //*****************************************************************************
467 //
485 //
486 //*****************************************************************************
487 extern void FlashCtl_A_enableWordProgramming(uint32_t mode);
488 
489 //*****************************************************************************
490 //
497 //
498 //*****************************************************************************
499 extern void FlashCtl_A_disableWordProgramming(void);
500 
501 //*****************************************************************************
502 //
512 //
513 //*****************************************************************************
514 extern uint32_t FlashCtl_A_isWordProgrammingEnabled(void);
515 
516 //*****************************************************************************
517 //
537 //
538 //*****************************************************************************
539 extern bool FlashCtl_A_setReadMode(uint32_t flashBank, uint32_t readMode);
540 
541 //*****************************************************************************
542 //
559 //
560 //*****************************************************************************
561 extern uint32_t FlashCtl_A_getReadMode(uint32_t flashBank);
562 
563 //*****************************************************************************
564 //
576 //
577 //*****************************************************************************
578 extern void FlashCtl_A_setWaitState(uint32_t bank, uint32_t waitState);
579 
580 //*****************************************************************************
581 //
589 //
590 //*****************************************************************************
591 extern uint32_t FlashCtl_A_getWaitState(uint32_t bank);
592 
593 //*****************************************************************************
594 //
617 //
618 //*****************************************************************************
619 extern void FlashCtl_A_enableInterrupt(uint32_t flags);
620 
621 //*****************************************************************************
622 //
642 //
643 //*****************************************************************************
644 extern void FlashCtl_A_disableInterrupt(uint32_t flags);
645 
646 //*****************************************************************************
647 //
666 //
667 //*****************************************************************************
668 extern uint32_t FlashCtl_A_getEnabledInterruptStatus(void);
669 
670 //*****************************************************************************
671 //
687 //
688 //*****************************************************************************
689 extern uint32_t FlashCtl_A_getInterruptStatus(void);
690 
691 //*****************************************************************************
692 //
724 //
725 //*****************************************************************************
726 extern void FlashCtl_A_clearInterruptFlag(uint32_t flags);
727 
728 //*****************************************************************************
729 //
746 //
747 //*****************************************************************************
748 extern void FlashCtl_A_registerInterrupt(void (*intHandler)(void));
749 
750 //*****************************************************************************
751 //
762 //
763 //*****************************************************************************
764 extern void FlashCtl_A_unregisterInterrupt(void);
765 
766 //*****************************************************************************
767 //
782 //
783 //*****************************************************************************
784 extern void FlashCtl_A_initiateSectorErase(uint32_t addr);
785 
786 /* The following functions are advanced functions that are used by the flash
787  * driver to remask a failed bit in the event of a post or pre verification
788  * failure. They are meant to be advanced functions and should not be used
789  * by the majority of users (unless you are writing your own flash driver).
790  */
791 extern uint8_t __FlashCtl_A_remaskData8Post(uint8_t data, uint32_t addr);
792 extern uint8_t __FlashCtl_A_remaskData8Pre(uint8_t data, uint32_t addr);
793 extern uint32_t __FlashCtl_A_remaskData32Post(uint32_t data, uint32_t addr);
794 extern uint32_t __FlashCtl_A_remaskData32Pre(uint32_t data, uint32_t addr);
795 extern void __FlashCtl_A_remaskBurstDataPost(uint32_t addr, uint32_t size);
796 extern void __FlashCtl_A_remaskBurstDataPre(uint32_t addr, uint32_t size);
797 
798 //*****************************************************************************
799 //
800 // Mark the end of the C bindings section for C++ compilers.
801 //
802 //*****************************************************************************
803 #ifdef __cplusplus
804 }
805 #endif
806 
807 //*****************************************************************************
808 //
809 // Close the Doxygen group.
811 //
812 //*****************************************************************************
813 
814 #endif // __FLASH_A_H__
uint32_t B0_MAIN_R7
Definition: flash_a.h:127
uint32_t __FlashCtl_A_remaskData32Post(uint32_t data, uint32_t addr)
Definition: flash_a.c:1518
uint32_t FlashCtl_A_getEnabledInterruptStatus(void)
Definition: flash_a.c:1412
uint32_t B1_MAIN_R4
Definition: flash_a.h:132
uint32_t B0_MAIN_R3
Definition: flash_a.h:123
bool FlashCtl_A_unprotectMemory(uint32_t startAddr, uint32_t endAddr)
Definition: flash_a.c:451
void FlashCtl_A_disableReadBuffering(uint_fast8_t memoryBank, uint_fast8_t accessMethod)
Definition: flash_a.c:371
void FlashCtl_A_setProgramVerification(uint32_t verificationSetting)
Definition: flash_a.c:1297
uint32_t FlashCtl_A_getReadMode(uint32_t flashBank)
Definition: flash_a.c:878
uint32_t B1_MAIN_R0
Definition: flash_a.h:128
uint32_t B1_MAIN_R7
Definition: flash_a.h:135
bool FlashCtl_A_programMemory(void *src, void *dest, uint32_t length)
Definition: flash_a.c:1179
uint32_t B0_INFO_R0
Definition: flash_a.h:136
uint32_t B0_MAIN_R5
Definition: flash_a.h:125
uint32_t B1_MAIN_R1
Definition: flash_a.h:129
bool FlashCtl_A_setReadMode(uint32_t flashBank, uint32_t readMode)
Definition: flash_a.c:849
uint32_t __FlashCtl_A_remaskData32Pre(uint32_t data, uint32_t addr)
Definition: flash_a.c:1566
bool FlashCtl_A_verifyMemory(void *verifyAddr, uint32_t length, uint_fast8_t pattern)
Definition: flash_a.c:665
void FlashCtl_A_enableInterrupt(uint32_t flags)
Definition: flash_a.c:1397
bool FlashCtl_A_performMassErase(void)
Definition: flash_a.c:906
void FlashCtl_A_registerInterrupt(void(*intHandler)(void))
Definition: flash_a.c:1422
uint32_t FlashCtl_A_getWaitState(uint32_t bank)
Definition: flash_a.c:1380
uint8_t __FlashCtl_A_remaskData8Pre(uint8_t data, uint32_t addr)
Definition: flash_a.c:1483
uint32_t FlashCtl_A_getInterruptStatus(void)
Definition: flash_a.c:1407
void FlashCtl_A_enableWordProgramming(uint32_t mode)
Definition: flash_a.c:1332
void FlashCtl_A_initiateMassErase(void)
Definition: flash_a.c:895
uint32_t B0_MAIN_R0
Definition: flash_a.h:120
void FlashCtl_A_setWaitState(uint32_t bank, uint32_t waitState)
Definition: flash_a.c:1362
bool FlashCtl_A_eraseSector(uint32_t addr)
Definition: flash_a.c:1030
uint32_t B0_MAIN_R6
Definition: flash_a.h:126
uint32_t B1_MAIN_R5
Definition: flash_a.h:133
void __FlashCtl_A_remaskBurstDataPost(uint32_t addr, uint32_t size)
Definition: flash_a.c:1678
void FlashCtl_A_disableWordProgramming(void)
Definition: flash_a.c:1346
void FlashCtl_A_initiateSectorErase(uint32_t addr)
Definition: flash_a.c:1136
void FlashCtl_A_clearProgramVerification(uint32_t verificationSetting)
Definition: flash_a.c:1314
void FlashCtl_A_disableInterrupt(uint32_t flags)
Definition: flash_a.c:1402
uint32_t B0_MAIN_R1
Definition: flash_a.h:121
uint32_t B1_INFO_R0
Definition: flash_a.h:137
uint32_t B0_MAIN_R4
Definition: flash_a.h:124
void FlashCtl_A_getMemoryInfo(uint32_t addr, uint32_t *sectorNum, uint32_t *bankNum)
Definition: flash_a.c:70
bool FlashCtl_A_isMemoryProtected(uint32_t addr)
Definition: flash_a.c:388
struct __sFlashCtl_ProtectionRegister __FlashCtl_ProtectionRegister
void FlashCtl_A_clearInterruptFlag(uint32_t flags)
Definition: flash_a.c:1417
uint32_t B1_MAIN_R3
Definition: flash_a.h:131
uint32_t FlashCtl_A_isWordProgrammingEnabled(void)
Definition: flash_a.c:1351
uint32_t B1_MAIN_R2
Definition: flash_a.h:130
uint8_t __FlashCtl_A_remaskData8Post(uint8_t data, uint32_t addr)
Definition: flash_a.c:1448
void FlashCtl_A_enableReadBuffering(uint_fast8_t memoryBank, uint_fast8_t accessMethod)
Definition: flash_a.c:354
uint32_t B0_MAIN_R2
Definition: flash_a.h:122
bool FlashCtl_A_isMemoryRangeProtected(uint32_t startAddr, uint32_t endAddr)
Definition: flash_a.c:433
bool FlashCtl_A_protectMemory(uint32_t startAddr, uint32_t endAddr)
Definition: flash_a.c:558
Definition: flash_a.h:118
void __FlashCtl_A_remaskBurstDataPre(uint32_t addr, uint32_t size)
Definition: flash_a.c:1614
void FlashCtl_A_unregisterInterrupt(void)
Definition: flash_a.c:1435
uint32_t B1_MAIN_R6
Definition: flash_a.h:134

Copyright 2016, Texas Instruments Incorporated