using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using MSP_GANG_Programmer; //using System.Runtime.InteropServices; namespace SimpleMspGang { public partial class Form1 : Form { String reportText = ""; int status = 0; public Form1() { InitializeComponent(); } private void StartButton_Click(object sender, EventArgs e) { GangInit(); PrintReportMsg("FlashReadMode ", false); status = MSPGANG_API.SetConfig(ConfigIndexes.CFG_FLASHREADMODE, ConfigIndexes.READ_ALL_MEM_INDEX); if (Evaluate(status)) return; PrintReportMsg("FlashEraseMode ", false); status = MSPGANG_API.SetConfig(ConfigIndexes.CFG_FLASHERASEMODE, ConfigIndexes.ERASE_ALL_MEM_INDEX); if (Evaluate(status)) return; PrintReportMsg("Erase InfoA ", false); status = MSPGANG_API.SetConfig(ConfigIndexes.CFG_ERASEINFOA, 1); if (Evaluate(status)) return; byte [] data = new byte[128]; int target, dataSize; PrintReportMsg("step1 ", false); status = MSPGANG_API.Interactive_Open_Target_Device("step1" ); if (Evaluate(status)) return; PrintReportMsg("Erase sector infoA ", false); status = MSPGANG_API.Interactive_EraseSectors(0x1980, 0x19ff); if (Evaluate(status)) return; PrintReportMsg("Close Target ", false); MSPGANG_API.Interactive_Close_Target_Device(); if (Evaluate(status)) return; PrintReportMsg("step2 ", false); status = MSPGANG_API.Interactive_Open_Target_Device("step2"); if (Evaluate(status)) return; target = 6; dataSize = 128; unsafe { fixed (byte* aptr = &data[0]) { for(int k = 0; k < 128; k++) aptr[k] = (byte)(k + 3); PrintReportMsg("SetGangBuffer ", false); status = MSPGANG_API.SetGangBuffer((byte)target, (byte)dataSize, aptr); if (Evaluate(status)) return; PrintReportMsg("Copy buffer to flash ", false); status = MSPGANG_API.Interactive_Copy_GANG_Buffer_to_FLASH(0x1980, dataSize); //copy data to FLASH } if (Evaluate(status)) return; } /* // execute main process and show result. Erase, Blank Check, Program, Verify. PrintReportMsg("MSPGANG_MainProcess ", false); status = MSPGANG_API.MainProcess(1000); PrintReportMsg(" Analysis Below:", true); // analyze results of programming ShowDiagnostic(); */ //MSPGANG_InteractiveProcess(1000); PrintReportMsg("Start Complete", true); MSPGANG_API.Interactive_Close_Target_Device(); MSPGANG_API.ReleaseCom(); } private void GangInit() { // setup for communication PrintReportMsg("MSPGANG_InitCom ", false); status = MSPGANG_API.InitCom(Demo.ComPort, Demo.Baudrate); // com5 & 115200k if (Evaluate(status)) return; // reset configuration settings to default PrintReportMsg("MSPGANG_Default_Config ", false); status = MSPGANG_API.Default_Config(); if (Evaluate(status)) return; // set device type being programmed in the config. One from the list of compatible MCUs. PrintReportMsg("MSPGANG_Set_MCU_Name ", false); status = MSPGANG_API.Set_MCU_Name(Demo.DeviceType); //msp430f6736a if (Evaluate(status)) return; // set SettleTime, config index 51, SettleTime in multiples of 20ms PrintReportMsg("MSPGANG_SetConfig(SetT) ", false); status = MSPGANG_API.SetConfig(ConfigIndexes.CFG_VCC_SETTLE_TIME, Demo.SettleTime); if (Evaluate(status)) return; // set targets enabled, config index 10, determines which targets are programmed PrintReportMsg("MSPGANG_SetConfig(TarEn) ", false); status = MSPGANG_API.SetConfig(ConfigIndexes.CFG_TARGET_EN_INDEX, Demo.TargetEn); if (Evaluate(status)) return; // MSPGANG_API.SetConfig(ConfigIndexes.CFG_FLASHREADMODE, ConfigIndexes.READ_ALL_MEM_INDEX); MSPGANG_API.SetConfig(ConfigIndexes.CFG_READINFOB, 1); MSPGANG_API.SetConfig(ConfigIndexes.CFG_READINFOC, 1); } } }