int main(void) { uint16_t i = 0; OscInit(); AnalogInit(); OutputInit(); PPSInit(); Timing_Init(); UART_DMA_Init(); UI_LED_Initialize(); for (i=0; i<UI_LED_Count; i++) { UI_LED_SetState(UI_LED_List[i], LED_On); } UI_LED_Update(); DBG_printf("\r\n"); DBG_printf("\2330;36mCalsol Datalogger v%u.%u (alpha)\23337m", VERSION_MAJ, VERSION_MIN); DBG_printf("\23336m Built %s %s with C30 ver %i\23337m", __DATE__, __TIME__, __C30_VERSION__); DBG_DATA_printf("\23336mDevice reset:%s%s%s%s%s%s%s%s\23337m", (RCONbits.TRAPR? " Trap" : ""), (RCONbits.IOPUWR? " IllegalOpcode/UninitializedW" : ""), (RCONbits.CM? " ConfigMismatch" : ""), (RCONbits.EXTR? " ExternalReset" : ""), (RCONbits.SWR? " SoftwareReset" : ""), (RCONbits.WDTO? " WatchdogTimeout" : ""), (RCONbits.BOR? " BrownOutReset" : ""), (RCONbits.POR? " PowerOnReset" : "") ); ECAN_Init(); ECAN_Config(); C1FCTRLbits.FSA = 4; // FIFO starts C1FEN1 = 0; ECAN_SetStandardFilter(0, 0x00, 0, 15); ECAN_SetStandardMask(0, 0x00); ECAN_SetMode(ECAN_MODE_OPERATE); ECAN_SetupDMA(); UI_Switch_Update(); if (UI_Switch_GetTest()) { DBG_printf("Entering test mode"); UI_LED_SetState(&UI_LED_Fault, LED_Blink); while (UI_Switch_GetTest()) { UI_LED_Update(); UI_Switch_Update(); } UI_LED_SetState(&UI_LED_Fault, LED_Off); UI_LED_Update(); } for (i=0; i<UI_LED_Count; i++) { UI_LED_SetState(UI_LED_List[i], LED_Off); } DBG_printf("Initialization complete"); Datalogger_Init(); while(1) { Datalogger_Loop(); } }
//Read a register from the memory static int _F9_Handler (void) { uint8_t RegToRead = argAsInt(1); uint8_t BufferNumber = argAsInt(2); uint16_t Addr = argAsInt(3); uint8_t DataBuffer[10]; if(RegToRead == 1) { AT45DB321D_Select(); } else if(RegToRead == 0) { AT45DB321D_Deselect(); } else if(RegToRead == 2) //Read status { //SPI_Init(SPI_SPEED_FCPU_DIV_2 | SPI_ORDER_MSB_FIRST | SPI_SCK_LEAD_FALLING | SPI_SAMPLE_TRAILING | SPI_MODE_MASTER); InitSPIMaster(0,0); //Mode 0,0 is good printf_P(PSTR("Stat: 0x%02X\n"), AT45DB321D_ReadStatus()); } else if(RegToRead == 3) //Read IDs { //SPI_Init(SPI_SPEED_FCPU_DIV_2 | SPI_ORDER_MSB_FIRST | SPI_SCK_LEAD_FALLING | SPI_SAMPLE_TRAILING | SPI_MODE_MASTER); InitSPIMaster(0,0); //Mode 0,0 is good AT45DB321D_Select(); SPISendByte(AT45DB321D_CMD_READ_DEVICE_ID); printf_P(PSTR("ID[1]: 0x%02X\n"), SPISendByte(0x00)); printf_P(PSTR("ID[2]: 0x%02X\n"), SPISendByte(0x00)); printf_P(PSTR("ID[3]: 0x%02X\n"), SPISendByte(0x00)); printf_P(PSTR("ID[4]: 0x%02X\n"), SPISendByte(0x00)); AT45DB321D_Deselect(); } else if(RegToRead == 4) //Read bytes from buffer { printf_P(PSTR("Reading 5 bytes from buffer %u at address 0x%04X\n"), BufferNumber, Addr); AT45DB321D_BufferRead(BufferNumber, Addr, DataBuffer, 5); printf_P(PSTR("0: 0x%02X\n"), DataBuffer[0]); printf_P(PSTR("1: 0x%02X\n"), DataBuffer[1]); printf_P(PSTR("2: 0x%02X\n"), DataBuffer[2]); printf_P(PSTR("3: 0x%02X\n"), DataBuffer[3]); printf_P(PSTR("4: 0x%02X\n"), DataBuffer[4]); } else if(RegToRead == 5) //write bytes to buffer { printf_P(PSTR("writing 5 bytes to buffer %u at address 0x%04X\n"), BufferNumber, Addr); DataBuffer[0] = 0xAE; DataBuffer[1] = 0x14; DataBuffer[2] = 0x9A; DataBuffer[3] = 0x22; DataBuffer[4] = 0x17; AT45DB321D_BufferWrite(BufferNumber, Addr, DataBuffer, 5); } else if(RegToRead == 6) //Copy page to buffer { printf_P(PSTR("Copy page 0x%04X to buffer %u\n"), Addr, BufferNumber); AT45DB321D_CopyPageToBuffer(BufferNumber, Addr); printf_P(PSTR("Stat: 0x%02X\n"), AT45DB321D_WaitForReady()); } else if(RegToRead == 7) //Copy buffer to page { printf_P(PSTR("Copy buffer %u to page 0x%04X\n"), BufferNumber, Addr); AT45DB321D_CopyBufferToPage(BufferNumber, Addr); printf_P(PSTR("Stat: 0x%02X\n"), AT45DB321D_WaitForReady()); } else if(RegToRead == 8) //Erase page { printf_P(PSTR("Erase page 0x%04X\n"), Addr); AT45DB321D_ErasePage(Addr); printf_P(PSTR("Stat: 0x%02X\n"), AT45DB321D_WaitForReady()); } else if(RegToRead == 9) //init datalogger { Datalogger_Init(DATALOGGER_INIT_APPEND | DATALOGGER_INIT_RESTART_IF_FULL); } else if (RegToRead == 10) { Datalogger_AddDataSet(DataBuffer); } else if (RegToRead == 11) { Datalogger_SaveDataToFlash(); } else if (RegToRead == 12) { Datalogger_ReadBackData(5); } return 0; }