Beispiel #1
0
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;
}