/*---------------------------------------------------------------------------------------------------------*/ int main(void) { //Initial System SYS_Init(); //Enable Timer0 clock and select Timer0 clock source CLK_EnableModuleClock(TMR0_MODULE); CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_HXT, 0); //Initial Timer0 to periodic mode with 2Hz TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 2); //Enable Timer0 interrupt TIMER_EnableInt(TIMER0); NVIC_EnableIRQ(TMR0_IRQn); //Initial 7-Segment Open_Seven_Segment(); //Start Timer0 TIMER_Start(TIMER0); while(1) { Show_Seven_Segment(TimerCounter / 10, 1); CLK_SysTickDelay(200); Show_Seven_Segment(TimerCounter % 10, 2); CLK_SysTickDelay(200); } }
/*---------------------------------------------------------------------------------------------------------*/ int32_t main(void) { unsigned int u32ByteCount; unsigned int u32PageNumber; unsigned int u32ProgramFlashAddress = 0; unsigned int u32VerifyFlashAddress = 0; unsigned int MidDid; /* Unlock protected registers */ SYS_UnlockReg(); /* Init System, peripheral clock and multi-function I/O */ SYS_Init(); /* Lock protected registers */ SYS_LockReg(); /* Init UART0 for printf */ UART0_Init(); printf("Hello World.\n"); printf("PLL Clock = %d Hz\n", CLK_GetPLLClockFreq()); printf("Core Clock = %d Hz\n\n", CLK_GetHCLKFreq()); printf("+-------------------------------------------------------+\n"); printf("| M451 Series SPI_Flash Sample Code |\n"); printf("+-------------------------------------------------------+\n"); /* Open 7-Seg */ Open_Seven_Segment(); /* Open SPI for Serial Flash */ Open_SPI_Flash(); /* Read MID & DID */ MidDid = SpiFlash_ReadMidDid(); printf("\nMID and DID = %x", MidDid); /* Erase SPI Flash */ SpiFlash_ChipErase(); printf("\nFlash Erasing... "); /* Wait ready */ SpiFlash_WaitReady(); printf("Done!"); /* Fill the Source Data and clear Destination Data Buffer */ for(u32ByteCount = 0; u32ByteCount < 256; u32ByteCount++) { SrcArray[u32ByteCount] = u32ByteCount; DestArray[u32ByteCount] = 0; } u32ProgramFlashAddress = 0; u32VerifyFlashAddress = 0; for(u32PageNumber = 0; u32PageNumber < TEST_NUMBER; u32PageNumber++) { printf("\n\nTest Page Number = %d", u32PageNumber); Show_Seven_Segment(u32PageNumber, 1); CLK_SysTickDelay(200000); /*=== Program SPI Flash ===*/ printf("\n Flash Programming... "); /* Page Program */ SpiFlash_PageProgram(SrcArray, u32ProgramFlashAddress, 256); SpiFlash_WaitReady(); u32ProgramFlashAddress += 0x100; printf("Done!"); /*=== Read Back and Compare Data ===*/ printf("\n Flash Verifying... "); /* Page Read */ SpiFlash_ReadData(DestArray, u32VerifyFlashAddress, 256); u32VerifyFlashAddress += 0x100; for(u32ByteCount = 0; u32ByteCount < 256; u32ByteCount++) { if(DestArray[u32ByteCount] != u32ByteCount) { /* Error */ printf("SPI Flash R/W Fail!"); while(1); } } /* Clear Destination Data Buffer */ for(u32ByteCount = 0; u32ByteCount < 256; u32ByteCount++) DestArray[u32ByteCount] = 0; printf("Done!"); } printf("\n\nSPI Flash Test Ok!"); printf("\n\n"); while(1); }
/*---------------------------------------------------------------------------------------------------------*/ int main() { unsigned int u32ByteCount; unsigned int u32PageNumber; unsigned int u32ProgramFlashAddress = 0; unsigned int u32VerifyFlashAddress = 0; unsigned int MidDid; PDMA_T *PDMA_CH1, *PDMA_CH2; // PDMA Channel 1/2 control registers PDMA_CH1 = (PDMA_T *)((uint32_t) PDMA1_BASE + (0x100 * (CH1-1))); PDMA_CH2 = (PDMA_T *)((uint32_t) PDMA1_BASE + (0x100 * (CH2-1))); /* Initial system */ SYS_Init(); /* Initial UART1 to 115200-8n1 for print message */ UART1_Init(); printf("Hello World.\n"); printf("PLL Clock = %d Hz\n", CLK_GetPLLClockFreq()); printf("Core Clock = %d Hz\n\n", CLK_GetHCLKFreq()); printf("+-------------------------------------------------------+\n"); printf("| Nano100 Series SPI_Flash Sample Code with PDMA |\n"); printf("+-------------------------------------------------------+\n"); /* Open 7-Seg */ Open_Seven_Segment(); /* Open SPI for Serial Flash */ Open_SPI_Flash(); /* Initial PDMA Channels */ Init_PDMA_CH1_for_SPI0_TX((uint32_t)SrcArray); Init_PDMA_CH2_for_SPI0_RX((uint32_t)DestArray); /* Enable PDMA IRQ */ NVIC_EnableIRQ(PDMA_IRQn); /* Read MID & DID */ MidDid = SpiFlash_w_PDMA_ReadMidDid(); printf("\nMID and DID = %x", MidDid); /* Erase SPI Flash */ SpiFlash_w_PDMA_ChipErase(); printf("\nFlash Erasing... "); /* Wait ready */ SpiFlash_w_PDMA_WaitReady(); printf("Done!"); /* Fill the Source Data and clear Destination Data Buffer */ for(u32ByteCount=0; u32ByteCount<256; u32ByteCount++) { SrcArray[u32ByteCount] = u32ByteCount; DestArray[u32ByteCount] = 0; } u32ProgramFlashAddress = 0; u32VerifyFlashAddress = 0; for(u32PageNumber=0; u32PageNumber<TEST_NUMBER; u32PageNumber++) { printf("\n\nTest Page Number = %d", u32PageNumber); Show_Seven_Segment(u32PageNumber,1); CLK_SysTickDelay(200000); /*=== Program SPI Flash ===*/ printf("\n Flash Programming... "); /* Trigger PDMA specified Channel */ PDMA_CH1->CSR |= (PDMA_CSR_TRIG_EN_Msk | PDMA_CSR_PDMACEN_Msk); /* Page Program */ SpiFlash_w_PDMA_PageProgram(u32ProgramFlashAddress, 256); SpiFlash_w_PDMA_WaitReady(); u32ProgramFlashAddress += 0x100; printf("Done!"); /*=== Read Back and Compare Data ===*/ printf("\n Flash Verifying... "); /* Trigger PDMA specified Channel */ PDMA_CH2->CSR |= (PDMA_CSR_TRIG_EN_Msk | PDMA_CSR_PDMACEN_Msk); /* Page Read */ SpiFlash_w_PDMA_ReadData(u32VerifyFlashAddress, 256); u32VerifyFlashAddress += 0x100; for(u32ByteCount=0; u32ByteCount<256; u32ByteCount++) { if(DestArray[u32ByteCount]!=u32ByteCount) { /* Error */ printf("\n\nSPI Flash R/W Fail!"); while(1); } } /* Clear Destination Data Buffer */ for(u32ByteCount=0; u32ByteCount<256; u32ByteCount++) DestArray[u32ByteCount] = 0; printf("Done!"); } printf("\n\nSPI Flash with PDMA Test Ok!"); printf("\n\n"); while(1); }