@mchp-mcc/dspic33a-flash 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,138 @@
1
+ import { AppModel } from "../generated_module/src/types/AutoModuleTypes";
2
+ import {
3
+ FLASH_INSTRUCTION_TYPE,
4
+ getMyDerivedData,
5
+ MyDerivedData,
6
+ } from "../src/DerivedData";
7
+
8
+ export const generatableItems = (model: AppModel): any => {
9
+ if (model) {
10
+ return new GeneratorModel(model);
11
+ }
12
+ return undefined;
13
+ };
14
+
15
+ class GeneratorModel {
16
+ private dataModel: AppModel;
17
+ constructor(dataModel: AppModel) {
18
+ this.dataModel = dataModel;
19
+ }
20
+
21
+ public getGeneratableItems = (): any => {
22
+ return this.getFlashGeneratableItems();
23
+ };
24
+
25
+ private getFlashGeneratableItems = (): any => {
26
+ const derivedData: MyDerivedData = getMyDerivedData(
27
+ this.dataModel,
28
+ ) as MyDerivedData;
29
+ if (!derivedData) return;
30
+ const interruptDriven = derivedData.getInterruptDrivenStatus();
31
+ //The template data is now responsible for getting all the information for the ftl's
32
+ const generatableItems = {
33
+ generatePLIBVersion: true,
34
+ PLIBVersion: "1.0.1",
35
+ disclaimer: "/*disclaimer*/",
36
+ generateInterfaceContent: derivedData.enableInterfaceDefinitionGeneration(),
37
+ moduleNameUpperCase: this.dataModel.getName().toLocaleUpperCase(),
38
+ moduleNameLowerCase: this.dataModel.getName().toLocaleLowerCase(),
39
+ generateBlockingAPI: derivedData.getBlockingAPIGenerationStatus(),
40
+ generateNonBlockingAPI: derivedData.getNonBlockingAPIGenerationStatus(),
41
+ interruptDriven: interruptDriven,
42
+ interfaceApi: derivedData.basic_flash_payload(),
43
+ properties: derivedData.getProperties(),
44
+ flashWordWriteSizeInInstructions: derivedData.getFlashWordWriteSizeInInstructions(),
45
+ flashInstructionType: FLASH_INSTRUCTION_TYPE,
46
+ flashWriteInstructionCount: String(
47
+ derivedData.getFlashWriteInstructionCount(),
48
+ ).replace(/,/g, ""),
49
+ flashInterface: derivedData.getFlashInterface(),
50
+ flashEraseInstructionCount: String(
51
+ derivedData.getFlashEraseInstructionCount(),
52
+ ).replace(/,/g, ""),
53
+ flashHasAuxiliary: derivedData.getFlashHasAuxiliary(),
54
+ flashEnduranceMinimum: derivedData.getFlashEnduranceMinimum(),
55
+ flashBytesPerInstruction: derivedData.getFlashBytesPerInstruction(),
56
+ flashPcUnitsPerInstruction: derivedData.getFlashPcUnitsPerInstruction(),
57
+ flashWordWriteOpCode: derivedData.getFlashWordWriteOpCodeHexString(),
58
+ flashRowWriteOpcode: derivedData.getFlashWriteRowOpCodeHexString(),
59
+ flashOpCodeMask: derivedData.getFlashOpCodeMaskHexString(),
60
+ flashErasePageSizeInInstructions: String(
61
+ derivedData.getFlashErasePageSizeInInstructions(),
62
+ ).replace(/,/g, ""),
63
+ flashPageEraseOpcode: derivedData.getFlashErasePageOpCodeHexString(),
64
+ flashHasEcc: derivedData.getFlashHasEcc(),
65
+ flashHasRowProgramming: derivedData.getFlashHasRowProgramming(),
66
+ flashWriteRowSizeInInstructions: String(
67
+ derivedData.getFlashWriteRowSizeInInstructions(),
68
+ ).replace(/,/g, ""),
69
+ flashEndAddress: derivedData.getFlashEndAddressHexString(),
70
+ flashProgramBeginAddress: derivedData.getFlashProgramBeginAddressHexString(),
71
+ flashUnlockKey: derivedData.getFlashUnlockKey(),
72
+ doxyDriverGroupName: "Flash Driver",
73
+ };
74
+ const interrupts = this.dataModel.getHardware()?.getPeripheral().interrupts;
75
+ if (interrupts != undefined) {
76
+ const flashInterrupt = interrupts["NVMI"];
77
+ if (interruptDriven) {
78
+ const contextList = getInterruptContextList(this.dataModel);
79
+ generatableItems["flashInterruptEnable"] = flashInterrupt?.enable ?? "";
80
+ generatableItems["flashInterruptFlag"] = flashInterrupt?.flag ?? "";
81
+ generatableItems["flashIsrHandlerName"] =
82
+ flashInterrupt?.handlerName ?? "";
83
+ generatableItems["isFlashContextSupported"] = isContextSupported(
84
+ contextList,
85
+ flashInterrupt?.name ?? "",
86
+ );
87
+ }
88
+ }
89
+ generatableItems[
90
+ "nvmControlRegister"
91
+ ] = this.dataModel?.getRegisters()?.NVMCON?.name;
92
+ generatableItems[
93
+ "nvmAddressRegister"
94
+ ] = this.dataModel?.getRegisters()?.NVMADR?.name;
95
+ generatableItems[
96
+ "nvmDataRegister0"
97
+ ] = this.dataModel?.getRegisters()?.NVMDATA0?.name;
98
+ generatableItems[
99
+ "nvmDataRegister1"
100
+ ] = this.dataModel?.getRegisters()?.NVMDATA1?.name;
101
+ generatableItems[
102
+ "nvmDataRegister2"
103
+ ] = this.dataModel?.getRegisters()?.NVMDATA2?.name;
104
+ generatableItems[
105
+ "nvmDataRegister3"
106
+ ] = this.dataModel?.getRegisters()?.NVMDATA3?.name;
107
+ generatableItems[
108
+ "nvmSrcAddressRegister"
109
+ ] = this.dataModel?.getRegisters()?.NVMSRCADR?.name;
110
+ return generatableItems;
111
+ };
112
+ }
113
+
114
+ export const getInterruptContextList = (dataModel: AppModel): string[] => {
115
+ const interruptPayload = dataModel.getImportValue("interrupt_service");
116
+
117
+ let contextList: string[] = [];
118
+ if (interruptPayload) {
119
+ if (interruptPayload?.contextEnabledInterruptList) {
120
+ contextList = interruptPayload["contextEnabledInterruptList"];
121
+ }
122
+ }
123
+ return contextList;
124
+ };
125
+
126
+ export const isContextSupported = (
127
+ contextList: string[],
128
+ interruptName: string,
129
+ ): boolean => {
130
+ let isContextSupported = false;
131
+ for (const ctxName of contextList) {
132
+ if (ctxName === interruptName) {
133
+ isContextSupported = true;
134
+ break;
135
+ }
136
+ }
137
+ return isContextSupported;
138
+ };
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@mchp-mcc/local-catalog",
3
+ "version": "1.0.0",
4
+ "content": [
5
+ {
6
+ "name": "@mchp-mcc/dspic33a-flash",
7
+ "version": "*",
8
+ "meta": {
9
+ "keywords": [
10
+ "avr",
11
+ "pic8",
12
+ "driver",
13
+ ""
14
+ ],
15
+ "name": "FLASH",
16
+ "category": "PLIB",
17
+ "description": "<Write description here>",
18
+ "deviceFilterRegEx": ".*",
19
+ "defaultSelection": true,
20
+ "releaseNotesLink": "https://onlinedocs.microchip.com/v2/keyword-lookup?keyword\u003dMCC.MELODY.8BITAVR.RELEASENOTES\u0026version\u003dlatest\u0026redirect\u003dtrue"
21
+ }
22
+ }
23
+ ],
24
+ "catalogs": []
25
+ }