static void sram_init(void) { /* Enable PMC clock for SMC */ pmc_enable_periph_clk(ID_SMC); /* Complete SMC configuration between SRAM and SMC waveforms. */ smc_set_setup_timing(SMC, 0, SMC_SETUP_NWE_SETUP(1) | SMC_SETUP_NCS_WR_SETUP(1) | SMC_SETUP_NRD_SETUP(1) | SMC_SETUP_NCS_RD_SETUP(1)); smc_set_pulse_timing(SMC, 0, SMC_PULSE_NWE_PULSE(6) | SMC_PULSE_NCS_WR_PULSE(6) | SMC_PULSE_NRD_PULSE(6) | SMC_PULSE_NCS_RD_PULSE(6)); smc_set_cycle_timing(SMC, 0, SMC_CYCLE_NWE_CYCLE(7) | SMC_CYCLE_NRD_CYCLE(7)); smc_set_mode(SMC, 0, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_8_BIT); /* Configure LB, enable SRAM access */ pio_configure_pin(PIN_EBI_NLB, PIN_EBI_NLB_FLAGS); /* Pull down LB, enable SRAM access */ pio_set_pin_low(PIN_EBI_NLB); }
static void psram_init(void) { pmc_enable_periph_clk(ID_SMC); /* Complete SMC configuration between PSRAM and SMC waveforms. */ smc_set_setup_timing(SMC, 0, SMC_SETUP_NWE_SETUP(1) | SMC_SETUP_NCS_WR_SETUP(0) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(0)); smc_set_pulse_timing(SMC, 0, SMC_PULSE_NWE_PULSE(3) | SMC_PULSE_NCS_WR_PULSE(4) | SMC_PULSE_NRD_PULSE(3) | SMC_PULSE_NCS_RD_PULSE(5)); smc_set_cycle_timing(SMC, 0, SMC_CYCLE_NWE_CYCLE(4) | SMC_CYCLE_NRD_CYCLE(5)); smc_set_mode(SMC, 0, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE #if SAM3S || SAM4S | SMC_MODE_DBW_8_BIT #elif SAM3U | SMC_MODE_DBW_BIT_16 #elif SAM3XA | SMC_MODE_DBW_BIT_8 #endif ); }
/** * \brief Initialize the LCD. */ static void gfx_init(void) { struct ili93xx_opt_t g_ili93xx_display_opt; /* Enable peripheral clock. */ pmc_enable_periph_clk(ID_SMC); /* Configure SMC interface for LCD. */ smc_set_setup_timing(SMC,ILI93XX_LCD_CS,SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2)); smc_set_pulse_timing(SMC, ILI93XX_LCD_CS , SMC_PULSE_NWE_PULSE(4) | SMC_PULSE_NCS_WR_PULSE(4) | SMC_PULSE_NRD_PULSE(10) | SMC_PULSE_NCS_RD_PULSE(10)); smc_set_cycle_timing(SMC, ILI93XX_LCD_CS, SMC_CYCLE_NWE_CYCLE(10) | SMC_CYCLE_NRD_CYCLE(22)); smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE); /* Initialize display parameter. */ g_ili93xx_display_opt.ul_width = ILI93XX_LCD_WIDTH; g_ili93xx_display_opt.ul_height = ILI93XX_LCD_HEIGHT; g_ili93xx_display_opt.foreground_color = COLOR_WHITE; g_ili93xx_display_opt.background_color = COLOR_WHITE; /* Initialize LCD. */ if (1 == ili93xx_init(&g_ili93xx_display_opt)) { while(1); } }
/** * \brief Configure SMC timing for static memory (LCD) */ static void _ILI9488_ConfigureSmc( void ) { /* Enable peripheral clock */ PMC_EnablePeripheral( ID_SMC ) ; /* Configure SMC, NCS3 is assigned to LCD */ SMC->SMC_CS_NUMBER[SMC_EBI_LCD_CS].SMC_SETUP = SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(0) | SMC_SETUP_NRD_SETUP(0) | SMC_SETUP_NCS_RD_SETUP(0); SMC->SMC_CS_NUMBER[SMC_EBI_LCD_CS].SMC_PULSE = SMC_PULSE_NWE_PULSE(6) | SMC_PULSE_NCS_WR_PULSE(0xA) | SMC_PULSE_NRD_PULSE(0xA) | SMC_PULSE_NCS_RD_PULSE(0xA); SMC->SMC_CS_NUMBER[SMC_EBI_LCD_CS].SMC_CYCLE = SMC_CYCLE_NWE_CYCLE(0xA) | SMC_CYCLE_NRD_CYCLE(0xA); SMC->SMC_CS_NUMBER[SMC_EBI_LCD_CS].SMC_MODE = SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_16_BIT | SMC_MODE_EXNW_MODE_DISABLED | SMC_MODE_TDF_CYCLES(0xF); }
/** * \brief Configures the EBI for NandFlash access. */ extern void BOARD_ConfigureNandFlash( Smc* pSmc ) { /* Enable peripheral clock */ PMC_EnablePeripheral( ID_SMC ) ; /* NCS0 is assigned to a NAND Flash (NANDOE and NANWE used for NCS0) */ // MATRIX->MATRIX_SFR[5] = 1; pSmc->SMC_CS_NUMBER[0].SMC_SETUP = SMC_SETUP_NWE_SETUP(0) | SMC_SETUP_NCS_WR_SETUP(1) | SMC_SETUP_NRD_SETUP(0) | SMC_SETUP_NCS_RD_SETUP(1); pSmc->SMC_CS_NUMBER[0].SMC_PULSE = SMC_PULSE_NWE_PULSE(2) | SMC_PULSE_NCS_WR_PULSE(3) | SMC_PULSE_NRD_PULSE(4) | SMC_PULSE_NCS_RD_PULSE(4); pSmc->SMC_CS_NUMBER[0].SMC_CYCLE = SMC_CYCLE_NWE_CYCLE(4) | SMC_CYCLE_NRD_CYCLE(7); pSmc->SMC_CS_NUMBER[0].SMC_MODE = SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE; }
/** \brief Configures the EBI for NandFlash access at 133Mhz. */ void BOARD_ConfigureNandFlash( uint8_t busWidth ) { #ifdef BOARD_REV_A_EK *ADDR_CCFG_EBICSA &= ~(3u << 24); *ADDR_CCFG_EBICSA |= (1 << 3); /* EBI Chip Select 3 is assigned to the Static Memory Controller and the NAND Flash Logic is activated */ #endif #ifdef BOARD_REV_A_VB *ADDR_CCFG_EBICSA |= (1 << 3) /* EBI Chip Select 3 is assigned to the Static Memory Controller and the NAND Flash Logic is activated */ | (1 << 24); /* NAND Flash I/O are connected to D16-D31 in case VDDIOM do not equals VDDNF */ // | (1 << 25); /* DDR Multi-port is enabled, performances are increased when using DDR2 (or LP-DDR) and 8-bit NAND Flash */ #endif #ifdef BOARD_REV_B_EK *ADDR_CCFG_EBICSA |= (1 << 3) /* EBI Chip Select 3 is assigned to the Static Memory Controller and the NAND Flash Logic is activated */ | (1 << 24); /* NAND Flash I/O are connected to D16-D31 in case VDDIOM do not equals VDDNF */ // | (1 << 25); /* DDR Multi-port is enabled, performances are increased when using DDR2 (or LP-DDR) and 8-bit NAND Flash */ #endif SMC->SMC_CS_NUMBER[3].SMC_SETUP = 0 | SMC_SETUP_NWE_SETUP(1) | SMC_SETUP_NCS_WR_SETUP(0) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(0); SMC->SMC_CS_NUMBER[3].SMC_PULSE = 0 | SMC_PULSE_NWE_PULSE(3) | SMC_PULSE_NCS_WR_PULSE(5) | SMC_PULSE_NRD_PULSE(4) | SMC_PULSE_NCS_RD_PULSE(6); SMC->SMC_CS_NUMBER[3].SMC_CYCLE = 0 | SMC_CYCLE_NWE_CYCLE(5) | SMC_CYCLE_NRD_CYCLE(7); SMC->SMC_CS_NUMBER[3].SMC_MODE = SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW(busWidth/16) | SMC_MODE_TDF_CYCLES(1); }
/** * \brief Configures the EBI for %NorFlash access. */ extern void BOARD_ConfigureNorFlash( Smc* pSmc ) { /* Enable peripheral clock */ PMC_EnablePeripheral( ID_SMC ) ; /* Configure SMC, NCS0 is assigned to a norflash */ pSmc->SMC_CS_NUMBER[0].SMC_SETUP = SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(0) | SMC_SETUP_NRD_SETUP(0) | SMC_SETUP_NCS_RD_SETUP(0); pSmc->SMC_CS_NUMBER[0].SMC_PULSE = SMC_PULSE_NWE_PULSE(6) | SMC_PULSE_NCS_WR_PULSE(0xA) | SMC_PULSE_NRD_PULSE(0xA) | SMC_PULSE_NCS_RD_PULSE(0xA); pSmc->SMC_CS_NUMBER[0].SMC_CYCLE = SMC_CYCLE_NWE_CYCLE(0xA) | SMC_CYCLE_NRD_CYCLE(0xA); pSmc->SMC_CS_NUMBER[0].SMC_MODE = SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_EXNW_MODE_DISABLED | SMC_MODE_TDF_CYCLES(0x1); }
void gfx_ili9325_init(void) { struct ili9325_opt_t g_ili9325_display_opt; /* initialize globals */ gfx_width = ILI9325_LCD_WIDTH; gfx_height = ILI9325_LCD_HEIGHT; /* Enable peripheral clock */ pmc_enable_periph_clk(ID_SMC); /* Configure SMC interface for Lcd */ smc_set_setup_timing(SMC,ILI9325_LCD_CS,SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2)); smc_set_pulse_timing(SMC, ILI9325_LCD_CS , SMC_PULSE_NWE_PULSE(4) | SMC_PULSE_NCS_WR_PULSE(4) | SMC_PULSE_NRD_PULSE(10) | SMC_PULSE_NCS_RD_PULSE(10)); smc_set_cycle_timing(SMC, ILI9325_LCD_CS, SMC_CYCLE_NWE_CYCLE(10) | SMC_CYCLE_NRD_CYCLE(22)); #if !defined(SAM4S) smc_set_mode(SMC, ILI9325_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_8_BIT); #else smc_set_mode(SMC, ILI9325_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE); #endif /* Initialize display parameter */ g_ili9325_display_opt.ul_width= ILI9325_LCD_WIDTH; g_ili9325_display_opt.ul_height = ILI9325_LCD_HEIGHT; g_ili9325_display_opt.foreground_color= COLOR_BLACK; g_ili9325_display_opt.background_color = COLOR_WHITE; /* Switch off backlight */ aat31xx_disable_backlight(); /* Initialize LCD */ ili9325_init(&g_ili9325_display_opt); ili9325_display_on(); /* Set backlight level */ aat31xx_set_backlight(AAT31XX_AVG_BACKLIGHT_LEVEL); /* Set clipping area to whole screen initially */ gfx_set_clipping(0, 0, gfx_width, gfx_height); gfx_draw_filled_rect(0, 0, gfx_width, gfx_height, GFX_COLOR(0xFF, 0xFF, 0xFF)); }
/** * \brief Configure the SMC for SRAM access. * * \param cs Chip select. */ static void configure_sram(uint32_t cs) { smc_set_setup_timing(SMC, cs, SMC_SETUP_NWE_SETUP(1) | SMC_SETUP_NCS_WR_SETUP(1) | SMC_SETUP_NRD_SETUP(1) | SMC_SETUP_NCS_RD_SETUP(1)); smc_set_pulse_timing(SMC, cs, SMC_PULSE_NWE_PULSE(6) | SMC_PULSE_NCS_WR_PULSE(6) | SMC_PULSE_NRD_PULSE(6) | SMC_PULSE_NCS_RD_PULSE(6)); smc_set_cycle_timing(SMC, cs, SMC_CYCLE_NWE_CYCLE(7) | SMC_CYCLE_NRD_CYCLE(7)); smc_set_mode(SMC, cs, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE); }
void configure_LCD(){ /** Enable peripheral clock */ pmc_enable_periph_clk(ID_SMC); /** Configure SMC interface for Lcd */ smc_set_setup_timing(SMC, ILI93XX_LCD_CS, SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2)); smc_set_pulse_timing(SMC, ILI93XX_LCD_CS, SMC_PULSE_NWE_PULSE(4) | SMC_PULSE_NCS_WR_PULSE(4) | SMC_PULSE_NRD_PULSE(10) | SMC_PULSE_NCS_RD_PULSE(10)); smc_set_cycle_timing(SMC, ILI93XX_LCD_CS, SMC_CYCLE_NWE_CYCLE(10) | SMC_CYCLE_NRD_CYCLE(22)); #if ((!defined(SAM4S)) && (!defined(SAM4E))) smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_8_BIT); #else smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE); #endif /** Initialize display parameter */ g_ili93xx_display_opt.ul_width = ILI93XX_LCD_WIDTH; g_ili93xx_display_opt.ul_height = ILI93XX_LCD_HEIGHT; g_ili93xx_display_opt.foreground_color = COLOR_BLACK; g_ili93xx_display_opt.background_color = COLOR_WHITE; /** Switch off backlight */ aat31xx_disable_backlight(); /** Initialize LCD */ ili93xx_init(&g_ili93xx_display_opt); /** Set backlight level */ aat31xx_set_backlight(AAT31XX_AVG_BACKLIGHT_LEVEL); ili93xx_set_foreground_color(COLOR_WHITE); ili93xx_draw_filled_rectangle(0, 0, ILI93XX_LCD_WIDTH, ILI93XX_LCD_HEIGHT); /** Turn on LCD */ ili93xx_display_on(); ili93xx_set_cursor_position(0, 0); ili93xx_set_foreground_color(COLOR_BLACK); ili93xx_draw_circle(120, 160, 40); ili93xx_draw_line(120, 160, 60, 160); ili93xx_draw_line(120, 160, 120, 100); ili93xx_draw_line(120, 160, 180, 160); }
/** * \brief Application entry point for smc_psram example. * * \return Unused (ANSI-C compatibility). */ int main(void) { /* Initialize the SAM system */ sysclk_init(); board_init(); configure_console(); /* Output example information */ puts(STRING_HEADER); /* Enable PMC clock for SMC module */ puts("Configure PMC to enable the SMC clock.\r"); pmc_enable_periph_clk(ID_SMC); /* Configure EBI I/O for PSRAM connection */ puts("Configure SMC timing and mode.\r"); /* complete SMC configuration between PSRAM and SMC waveforms. */ smc_set_setup_timing(SMC, 0, SMC_SETUP_NWE_SETUP(0) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2)); smc_set_pulse_timing(SMC, 0, SMC_PULSE_NWE_PULSE(6) | SMC_PULSE_NCS_WR_PULSE(6) | SMC_PULSE_NRD_PULSE(6) | SMC_PULSE_NCS_RD_PULSE(6)); smc_set_cycle_timing(SMC, 0, SMC_CYCLE_NWE_CYCLE(8) | SMC_CYCLE_NRD_CYCLE(8)); smc_set_mode(SMC, 0, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_BIT_16); /* Test external PSRAM access */ puts("Test external PSRAM access. \r"); uint8_t *ptr = (uint8_t *) PSRAM_BASE_ADDRESS; ptr[0] = 0x50; ptr[1] = 0x51; ptr[2] = 0x52; ptr[3] = 0x53; if (access_psram_test()) { puts("Psram access successful.\r"); } else { puts("Psram access failed.\r"); } while (1) { } }
static void psram_init(void) { pmc_enable_periph_clk(ID_SMC); /* complete SMC configuration between PSRAM and SMC waveforms. */ smc_set_setup_timing(SMC, 0, SMC_SETUP_NWE_SETUP(0) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2)); smc_set_pulse_timing(SMC, 0, SMC_PULSE_NWE_PULSE(6) | SMC_PULSE_NCS_WR_PULSE(6) | SMC_PULSE_NRD_PULSE(6) | SMC_PULSE_NCS_RD_PULSE(6)); smc_set_cycle_timing(SMC, 0, SMC_CYCLE_NWE_CYCLE(8) | SMC_CYCLE_NRD_CYCLE(8)); smc_set_mode(SMC, 0, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_BIT_16); }
/** * \brief An accurate one-to-one comparison is necessary between PSRAM and SMC waveforms for * a complete SMC configuration. * \note The system is running at 48 MHz for the EBI Bus. * Please refer to the "AC Characteristics" section of the customer product datasheet. */ extern void BOARD_ConfigurePSRAM( Smc* pSmc ) { uint32_t dwTmp ; /* Enable peripheral clock */ PMC_EnablePeripheral( ID_SMC ) ; /* Configure SMC, NCS1 is assigned to a external PSRAM */ /** * PSRAM IS66WV51216BLL * 55 ns Access time * tdoe = 25 ns max * SMC1 (timing SAM3S read mode SMC) = 21 ns of setup * 21 + 55 = 76 ns => at least 5 cycles at 64 MHz * Write pulse width minimum = 45 ns (PSRAM) */ pSmc->SMC_CS_NUMBER[1].SMC_SETUP = SMC_SETUP_NWE_SETUP( 1 ) | SMC_SETUP_NCS_WR_SETUP( 0 ) | SMC_SETUP_NRD_SETUP( 2 ) | SMC_SETUP_NCS_RD_SETUP( 0 ) ; pSmc->SMC_CS_NUMBER[1].SMC_PULSE = SMC_PULSE_NWE_PULSE( 3 ) | SMC_PULSE_NCS_WR_PULSE( 4 ) | SMC_PULSE_NRD_PULSE( 3 ) | SMC_PULSE_NCS_RD_PULSE( 5 ) ; /* NWE_CYCLE: The total duration of the write cycle. NWE_CYCLE = NWE_SETUP + NWE_PULSE + NWE_HOLD = NCS_WR_SETUP + NCS_WR_PULSE + NCS_WR_HOLD (tWC) Write Cycle Time min. 70ns NRD_CYCLE: The total duration of the read cycle. NRD_CYCLE = NRD_SETUP + NRD_PULSE + NRD_HOLD = NCS_RD_SETUP + NCS_RD_PULSE + NCS_RD_HOLD (tRC) Read Cycle Time min. 70ns. */ pSmc->SMC_CS_NUMBER[1].SMC_CYCLE = SMC_CYCLE_NWE_CYCLE( 4 ) | SMC_CYCLE_NRD_CYCLE( 5 ) ; dwTmp = SMC->SMC_CS_NUMBER[0].SMC_MODE; pSmc->SMC_CS_NUMBER[1].SMC_MODE = dwTmp | SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE; }
void at91_smc_setup(int id, int cs, const struct at91_smc_init *smc) { // Need a generic way to get this address for all SoCs... Assume 9260 for now... uint32_t base = AT91SAM9260_SMC_BASE + SMC_CS_OFF(cs); WR4HW(base, SMC_SETUP, SMC_SETUP_NCS_RD_SETUP(smc->ncs_rd_setup) | SMC_SETUP_NRD_SETUP(smc->nrd_setup) | SMC_SETUP_NCS_WR_SETUP(smc->ncs_wr_setup) | SMC_SETUP_NWE_SETUP(smc->nwe_setup)); WR4HW(base, SMC_PULSE, SMC_PULSE_NCS_RD_PULSE(smc->ncs_rd_pulse) | SMC_PULSE_NRD_PULSE(smc->nrd_pulse) | SMC_PULSE_NCS_WR_PULSE(smc->ncs_wr_pulse) | SMC_PULSE_NWE_PULSE(smc->nwe_pulse)); WR4HW(base, SMC_CYCLE, SMC_CYCLE_NRD_CYCLE(smc->nrd_cycle) | SMC_CYCLE_NWE_CYCLE(smc->nwe_cycle)); WR4HW(base, SMC_MODE, smc->mode | SMC_MODE_TDF_CYCLES(smc->tdf_cycles)); }
*/ static void configure_lcd(void) { /* Configure SMC interface for Lcd */ smc_set_setup_timing(SMC,ILI9325_LCD_CS,SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2)); smc_set_pulse_timing(SMC, ILI9325_LCD_CS , SMC_PULSE_NWE_PULSE(4) | SMC_PULSE_NCS_WR_PULSE(4) | SMC_PULSE_NRD_PULSE(10) | SMC_PULSE_NCS_RD_PULSE(10)); smc_set_cycle_timing(SMC, ILI9325_LCD_CS, SMC_CYCLE_NWE_CYCLE(10) | SMC_CYCLE_NRD_CYCLE(22)); #if !defined(SAM4S) smc_set_mode(SMC, ILI9325_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_8_BIT); #else smc_set_mode(SMC, ILI9325_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE); #endif /* Initialize display parameter */ g_ili9325_display_opt.ul_width = ILI9325_LCD_WIDTH; g_ili9325_display_opt.ul_height = ILI9325_LCD_HEIGHT; g_ili9325_display_opt.foreground_color = COLOR_BLACK; g_ili9325_display_opt.background_color = COLOR_WHITE; /* Switch off backlight */ //aat31xx_disable_backlight(); /* Initialize LCD */ ili9325_init(&g_ili9325_display_opt); /* Set backlight level */ aat31xx_set_backlight(AAT31XX_MAX_BACKLIGHT_LEVEL); ili9325_set_foreground_color(COLOR_WHITE); ili9325_draw_filled_rectangle(0, 0, ILI9325_LCD_WIDTH, ILI9325_LCD_HEIGHT); /* Turn on LCD */ ili9325_display_on();
static void ext_sram_init(void) { pmc_enable_periph_clk(ID_SMC); smc_set_setup_timing(SMC, 0, SMC_SETUP_NWE_SETUP(1) | SMC_SETUP_NCS_WR_SETUP(1) | SMC_SETUP_NRD_SETUP(1) | SMC_SETUP_NCS_RD_SETUP(1)); smc_set_pulse_timing(SMC, 0, SMC_PULSE_NWE_PULSE(6) | SMC_PULSE_NCS_WR_PULSE(6) | SMC_PULSE_NRD_PULSE(6) | SMC_PULSE_NCS_RD_PULSE(6)); smc_set_cycle_timing(SMC, 0, SMC_CYCLE_NWE_CYCLE(7) | SMC_CYCLE_NRD_CYCLE(7)); smc_set_mode(SMC, 0, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_8_BIT); /* Configure LB, enable SRAM access */ pio_configure_pin(PIN_EBI_NLB, PIN_EBI_NLB_FLAGS); /* Pull down LB, enable sram access */ pio_set_pin_low(PIN_EBI_NLB); }
/** * \brief Initializes the LCD controller. * Configure SMC to access LCD controller at 64MHz MCK. */ extern void LCDD_Initialize( void ) { const Pin pPins[] = {BOARD_LCD_PINS}; Smc *pSmc = SMC; /* Enable pins */ PIO_Configure(pPins, PIO_LISTSIZE(pPins)); /* Enable peripheral clock */ PMC_EnablePeripheral( ID_SMC ) ; /* EBI SMC Configuration */ pSmc->SMC_CS_NUMBER[1].SMC_SETUP = SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2); pSmc->SMC_CS_NUMBER[1].SMC_PULSE = SMC_PULSE_NWE_PULSE(4) | SMC_PULSE_NCS_WR_PULSE(4) | SMC_PULSE_NRD_PULSE(10) | SMC_PULSE_NCS_RD_PULSE(10); pSmc->SMC_CS_NUMBER[1].SMC_CYCLE = SMC_CYCLE_NWE_CYCLE(10) | SMC_CYCLE_NRD_CYCLE(22); pSmc->SMC_CS_NUMBER[1].SMC_MODE = SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_8_BIT; /* Initialize LCD controller */ LCD_Initialize() ; /* Initialize LCD controller */ LCD_SetDisplayPortrait( 0 ) ; /* Set LCD backlight */ LCDD_SetBacklight( 2 ) ; }
/** * \brief Application entry point for smc_lcd example. * * \return Unused (ANSI-C compatibility). */ int main(void) { sysclk_init(); board_init(); /** Configura os botões, o TC e desabilita o Watchdog Timer. */ configure_buttons(); WDT->WDT_MR = WDT_MR_WDDIS; configure_tc(); /** Initialize debug console */ configure_console(); /** Enable peripheral clock */ pmc_enable_periph_clk(ID_SMC); /** Configure SMC interface for Lcd */ smc_set_setup_timing(SMC, ILI93XX_LCD_CS, SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2)); smc_set_pulse_timing(SMC, ILI93XX_LCD_CS, SMC_PULSE_NWE_PULSE(4) | SMC_PULSE_NCS_WR_PULSE(4) | SMC_PULSE_NRD_PULSE(10) | SMC_PULSE_NCS_RD_PULSE(10)); smc_set_cycle_timing(SMC, ILI93XX_LCD_CS, SMC_CYCLE_NWE_CYCLE(10) | SMC_CYCLE_NRD_CYCLE(22)); #if ((!defined(SAM4S)) && (!defined(SAM4E))) smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_8_BIT); #else smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE); #endif /** Initialize display parameter */ g_ili93xx_display_opt.ul_width = ILI93XX_LCD_WIDTH; g_ili93xx_display_opt.ul_height = ILI93XX_LCD_HEIGHT; g_ili93xx_display_opt.foreground_color = COLOR_BLACK; g_ili93xx_display_opt.background_color = COLOR_WHITE; /** Switch off backlight */ aat31xx_disable_backlight(); /** Initialize LCD */ ili93xx_init(&g_ili93xx_display_opt); /** Set backlight level */ aat31xx_set_backlight(AAT31XX_AVG_BACKLIGHT_LEVEL); ili93xx_set_foreground_color(COLOR_WHITE); ili93xx_draw_filled_rectangle(0, 0, ILI93XX_LCD_WIDTH, ILI93XX_LCD_HEIGHT); /** Turn on LCD */ ili93xx_display_on(); ili93xx_set_cursor_position(0, 0); /** Escreve os nomes no display. */ ili93xx_set_foreground_color(COLOR_BLACK); ili93xx_draw_string(10, 20, (uint8_t *)"Bruna Tavares"); ili93xx_draw_string(10, 40, (uint8_t *)"Bruno Campos"); ili93xx_draw_string(10, 60, (uint8_t *)"Keneth Yamada"); /** Desenha linha */ ili93xx_set_foreground_color(COLOR_BLUEVIOLET); ili93xx_draw_line(0, 90, 240, 90); /** Escreve contador e tempo no display. */ ili93xx_set_foreground_color(COLOR_BLACK); ili93xx_draw_string(10, 110, (uint8_t *)"Contador"); ili93xx_draw_string(10, 300, (uint8_t *)"Tempo "); /** Escreve valores iniciais do contador. */ ili93xx_draw_string(130, 110, (uint8_t *)"000"); ili93xx_draw_string(140, 300, (uint8_t *)"00:00"); while (1) { // Coloca o microcontrolador em modo Sleep aguardando interrupções. pmc_sleep(SAM_PM_SMODE_SLEEP_WFI); } }
/** * \brief Application entry point for smc_lcd example. * * \return Unused (ANSI-C compatibility). */ int main(void) { sysclk_init(); board_init(); /** Initialize debug console */ configure_console(); /** Enable peripheral clock */ pmc_enable_periph_clk(ID_SMC); /** Configure SMC interface for Lcd */ smc_set_setup_timing(SMC, ILI93XX_LCD_CS, SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2)); smc_set_pulse_timing(SMC, ILI93XX_LCD_CS, SMC_PULSE_NWE_PULSE(4) | SMC_PULSE_NCS_WR_PULSE(4) | SMC_PULSE_NRD_PULSE(10) | SMC_PULSE_NCS_RD_PULSE(10)); smc_set_cycle_timing(SMC, ILI93XX_LCD_CS, SMC_CYCLE_NWE_CYCLE(10) | SMC_CYCLE_NRD_CYCLE(22)); #if ((!defined(SAM4S)) && (!defined(SAM4E))) smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_8_BIT); #else smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE); #endif /** Initialize display parameter */ g_ili93xx_display_opt.ul_width = ILI93XX_LCD_WIDTH; g_ili93xx_display_opt.ul_height = ILI93XX_LCD_HEIGHT; g_ili93xx_display_opt.foreground_color = COLOR_BLACK; g_ili93xx_display_opt.background_color = COLOR_WHITE; /** Switch off backlight */ aat31xx_disable_backlight(); /** Initialize LCD */ ili93xx_init(&g_ili93xx_display_opt); /** Set backlight level */ aat31xx_set_backlight(AAT31XX_AVG_BACKLIGHT_LEVEL); ili93xx_set_foreground_color(COLOR_WHITE); ili93xx_draw_filled_rectangle(0, 0, ILI93XX_LCD_WIDTH, ILI93XX_LCD_HEIGHT); /** Turn on LCD */ ili93xx_display_on(); ili93xx_set_cursor_position(0, 0); /** Draw text, image and basic shapes on the LCD */ ili93xx_set_foreground_color(COLOR_BLACK); ili93xx_draw_string(10, 20, (uint8_t *)"ili93xx_lcd example"); ili93xx_set_foreground_color(COLOR_RED); ili93xx_draw_circle(60, 160, 40); ili93xx_set_foreground_color(COLOR_GREEN); ili93xx_draw_circle(120, 160, 40); ili93xx_set_foreground_color(COLOR_BLUE); ili93xx_draw_circle(180, 160, 40); ili93xx_set_foreground_color(COLOR_VIOLET); ili93xx_draw_line(0, 0, 240, 320); while (1) { } }
/*! \brief Main function. Execution starts here. */ int main(void) { uint32_t serial_number[4]; // Read Device-ID from SAM3U. Do this before enabling interrupts etc. flash_read_unique_id(serial_number, sizeof(serial_number)); configure_console(); irq_initialize_vectors(); cpu_irq_enable(); // Initialize the sleep manager sleepmgr_init(); #if !SAMD21 && !SAMR21 sysclk_init(); board_init(); #else system_init(); #endif fpga_program_init(); tps56520_init(); //Init CDCE906 Chip cdce906_init(); //Convert serial number to ASCII for USB Serial number for(unsigned int i = 0; i < 4; i++){ sprintf(usb_serial_number+(i*8), "%08x", (unsigned int)serial_number[i]); } usb_serial_number[32] = 0; printf("ChipWhisperer-CW305 Online. Firmware build: %s/%s\n", __TIME__, __DATE__); printf("Serial number: %s\n", usb_serial_number); /* Enable SMC */ pmc_enable_periph_clk(ID_SMC); fpga_pins(true); /* Configure EBI I/O for PSRAM connection */ printf("Setting up FPGA Communication\n"); /* complete SMC configuration between PSRAM and SMC waveforms. */ smc_set_setup_timing(SMC, 0, SMC_SETUP_NWE_SETUP(0) | SMC_SETUP_NCS_WR_SETUP(1) | SMC_SETUP_NRD_SETUP(1) | SMC_SETUP_NCS_RD_SETUP(1)); smc_set_pulse_timing(SMC, 0, SMC_PULSE_NWE_PULSE(3) | SMC_PULSE_NCS_WR_PULSE(1) | SMC_PULSE_NRD_PULSE(3) | SMC_PULSE_NCS_RD_PULSE(1)); smc_set_cycle_timing(SMC, 0, SMC_CYCLE_NWE_CYCLE(4) | SMC_CYCLE_NRD_CYCLE(4)); smc_set_mode(SMC, 0, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_BIT_8); ui_init(); // Start USB stack to authorize VBus monitoring udc_start(); /* Enable PCLK0 at 96 MHz */ genclk_enable_config(GENCLK_PCK_0, GENCLK_PCK_SRC_MCK, GENCLK_PCK_PRES_1); //Following is 60MHz version //genclk_enable_config(GENCLK_PCK_0, GENCLK_PCK_SRC_PLLBCK, GENCLK_PCK_PRES_4); printf("Event Loop Entered, waiting...\n"); //Turn off FPGA pins for now, will be enabled in event loop fpga_pins(false); // The main loop manages only the power mode // because the USB management is done by interrupt while (true) { sleepmgr_enter_sleep(); process_events(); } }
*/ int main(void) { sysclk_init(); board_init(); /** Initialize debug console */ configure_console(); /** Configura o timer */ configure_tc(); /* Configura os botões */ configure_buttons(); /** Enable peripheral clock */ pmc_enable_periph_clk(ID_SMC); /** Configure SMC interface for Lcd */ smc_set_setup_timing(SMC, ILI93XX_LCD_CS, SMC_SETUP_NWE_SETUP(2) | SMC_SETUP_NCS_WR_SETUP(2) | SMC_SETUP_NRD_SETUP(2) | SMC_SETUP_NCS_RD_SETUP(2)); smc_set_pulse_timing(SMC, ILI93XX_LCD_CS, SMC_PULSE_NWE_PULSE(4) | SMC_PULSE_NCS_WR_PULSE(4) | SMC_PULSE_NRD_PULSE(10) | SMC_PULSE_NCS_RD_PULSE(10)); smc_set_cycle_timing(SMC, ILI93XX_LCD_CS, SMC_CYCLE_NWE_CYCLE(10) | SMC_CYCLE_NRD_CYCLE(22)); #if ((!defined(SAM4S)) && (!defined(SAM4E))) smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_8_BIT); #else smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE); #endif /** Initialize display parameter */ g_ili93xx_display_opt.ul_width = ILI93XX_LCD_WIDTH; g_ili93xx_display_opt.ul_height = ILI93XX_LCD_HEIGHT; g_ili93xx_display_opt.foreground_color = COLOR_BLACK; g_ili93xx_display_opt.background_color = COLOR_WHITE; /** Switch off backlight */ aat31xx_disable_backlight(); /** Initialize LCD */ ili93xx_init(&g_ili93xx_display_opt); /** Set backlight level */ aat31xx_set_backlight(AAT31XX_AVG_BACKLIGHT_LEVEL); ili93xx_set_foreground_color(COLOR_WHITE); ili93xx_draw_filled_rectangle(0, 0, ILI93XX_LCD_WIDTH, ILI93XX_LCD_HEIGHT); /** Turn on LCD */ ili93xx_display_on(); ili93xx_set_cursor_position(0, 0); /** Draw text, image and basic shapes on the LCD */ ili93xx_set_foreground_color(COLOR_BLACK); ili93xx_draw_string(80, 10, (uint8_t *)"13 - LCD"); ili93xx_draw_string(10, 40, (uint8_t *)"Andre"); ili93xx_draw_string(10, 60, (uint8_t *)"Thales"); ili93xx_draw_string(10, 80, (uint8_t *)"Tete"); ili93xx_set_foreground_color(COLOR_ORANGE); ili93xx_draw_filled_rectangle(0, 100, ILI93XX_LCD_WIDTH,105); ili93xx_set_foreground_color(COLOR_GREEN); ili93xx_draw_filled_rectangle(0, 106, ILI93XX_LCD_WIDTH,111); while (1) { /* Entra em modo sleep */ pmc_sleep(SAM_PM_SMODE_SLEEP_WFI); }
/*! \brief Main function. Execution starts here. */ int main(void) { uint32_t serial_number[4]; // Read Device-ID from SAM3U. Do this before enabling interrupts etc. flash_read_unique_id(serial_number, sizeof(serial_number)); configure_console(); irq_initialize_vectors(); cpu_irq_enable(); // Initialize the sleep manager sleepmgr_init(); #if !SAMD21 && !SAMR21 sysclk_init(); board_init(); #else system_init(); #endif //Tri-state XPROG pins XPROGTarget_DisableTargetPDI(); //Convert serial number to ASCII for USB Serial number for(unsigned int i = 0; i < 4; i++){ sprintf(usb_serial_number+(i*8), "%08x", (unsigned int)serial_number[i]); } usb_serial_number[32] = 0; printf("ChipWhisperer-Lite Online. Firmware build: %s/%s\n", __TIME__, __DATE__); printf("Serial number: %s\n", usb_serial_number); /* Enable SMC */ pmc_enable_periph_clk(ID_SMC); gpio_configure_pin(PIN_EBI_DATA_BUS_D0, PIN_EBI_DATA_BUS_FLAG1); gpio_configure_pin(PIN_EBI_DATA_BUS_D1, PIN_EBI_DATA_BUS_FLAG1); gpio_configure_pin(PIN_EBI_DATA_BUS_D2, PIN_EBI_DATA_BUS_FLAG1); gpio_configure_pin(PIN_EBI_DATA_BUS_D3, PIN_EBI_DATA_BUS_FLAG1); gpio_configure_pin(PIN_EBI_DATA_BUS_D4, PIN_EBI_DATA_BUS_FLAG1); gpio_configure_pin(PIN_EBI_DATA_BUS_D5, PIN_EBI_DATA_BUS_FLAG1); gpio_configure_pin(PIN_EBI_DATA_BUS_D6, PIN_EBI_DATA_BUS_FLAG1); gpio_configure_pin(PIN_EBI_DATA_BUS_D7, PIN_EBI_DATA_BUS_FLAG1); gpio_configure_pin(PIN_EBI_NRD, PIN_EBI_NRD_FLAGS); gpio_configure_pin(PIN_EBI_NWE, PIN_EBI_NWE_FLAGS); gpio_configure_pin(PIN_EBI_NCS0, PIN_EBI_NCS0_FLAGS); /* We don't use address mapping so don't enable this */ /* gpio_configure_pin(PIN_EBI_ADDR_BUS_A1, PIN_EBI_ADDR_BUS_FLAG1); gpio_configure_pin(PIN_EBI_ADDR_BUS_A2, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A3, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A4, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A5, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A6, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A7, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A8, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A9, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A10, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A11, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A12, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A13, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A14, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A15, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A16, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A17, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A18, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A19, PIN_EBI_ADDR_BUS_FLAG2); gpio_configure_pin(PIN_EBI_ADDR_BUS_A20, PIN_EBI_ADDR_BUS_FLAG2); */ /* Configure EBI I/O for PSRAM connection */ printf("Setting up FPGA Communication\n"); /* complete SMC configuration between PSRAM and SMC waveforms. */ smc_set_setup_timing(SMC, 0, SMC_SETUP_NWE_SETUP(0) | SMC_SETUP_NCS_WR_SETUP(1) | SMC_SETUP_NRD_SETUP(1) | SMC_SETUP_NCS_RD_SETUP(1)); smc_set_pulse_timing(SMC, 0, SMC_PULSE_NWE_PULSE(1) | SMC_PULSE_NCS_WR_PULSE(1) | SMC_PULSE_NRD_PULSE(3) | SMC_PULSE_NCS_RD_PULSE(1)); smc_set_cycle_timing(SMC, 0, SMC_CYCLE_NWE_CYCLE(2) | SMC_CYCLE_NRD_CYCLE(4)); smc_set_mode(SMC, 0, SMC_MODE_READ_MODE | SMC_MODE_WRITE_MODE | SMC_MODE_DBW_BIT_8); ui_init(); // Start USB stack to authorize VBus monitoring udc_start(); /* Enable PCLK0 at 96 MHz */ genclk_enable_config(GENCLK_PCK_0, GENCLK_PCK_SRC_MCK, GENCLK_PCK_PRES_1); //Following is 60MHz version //genclk_enable_config(GENCLK_PCK_0, GENCLK_PCK_SRC_PLLBCK, GENCLK_PCK_PRES_4); printf("Event Loop Entered, waiting...\n"); // The main loop manages only the power mode // because the USB management is done by interrupt while (true) { sleepmgr_enter_sleep(); } }