I am using a custom board SAM3X8C and am having some trouble programming (Atmel Studio 6) the SPI interface to work with my ILI9341 LCD. The LCD module works with a separate board using an atmega2560 so I don’t believe the fault to be with the LCD itself. When I run the code provided below all I see is a blank screen (the backlight is on whenever there is power). All I am trying to accomplish is the fill the screen an arbitrary color (I can hopefully figure out the rest from there).
I am trying to use the ASF library for the “LCD - ILI9341 Display Controller (component)”. Following the example provided by Atmel’s ASF documentation (http://asf.atmel.com/docs/latest/sam3x/ … group.html and http://asf.atmel.com/docs/latest/sam3x/ … 41_qs.html) I have configured the conf_ili9341 header file as such:
#define CONF_ILI9341_CLOCK_SPEED 8000000UL
#define CONF_ILI9341_SPI SPI0
#define CONF_ILI9341_CS_PIN PIO_PA28_IDX
#define CONF_ILI9341_DC_PIN PIO_PB3_IDX
#define CONF_ILI9341_BACKLIGHT_PIN PIO_PA21_IDX
#define CONF_ILI9341_RESET_PIN PIO_PA29_IDX
The hardware side has been checked and re-checked over and over and looks correct. Following the datasheet I have SPI0 configured to use peripheral A and the pinout is reflected in the initialization inside main().
#include "asf.h"
#include "conf_board.h"
#include "conf_clock.h"
#include "conf_ili9341.h"
int main(void)
{
sysclk_init();
board_init();
pio_set_peripheral(PIOA, PIO_PERIPH_A, PIO_PA25A_SPI0_MISO);
pio_set_peripheral(PIOA, PIO_PERIPH_A, PIO_PA26A_SPI0_MOSI);
pio_set_peripheral(PIOA, PIO_PERIPH_A, PIO_PA27A_SPI0_SPCK);
pio_set_peripheral(PIOA, PIO_PERIPH_A, PIO_PA28A_SPI0_NPCS0);
pmc_enable_periph_clk(ID_SPI0);
ili9341_init();
ili9341_backlight_on();
ili9341_set_top_left_limit(0, 0);
ili9341_set_bottom_right_limit(240, 320);
ili9341_duplicate_pixel(ILI9341_COLOR(200, 20, 130), 240UL * 320UL);
}
Can anyone offer any suggestions on where to troubleshoot next or different code to try? Maybe I am just missing part of the SPI or LCD initialization. I am at a loss right now. I don’t have a scope to monitor the SPI lines unfortunately. I know the ASF wizard can be a bit funky to use correctly, so if anyone thinks that is the problem, could you suggest the right way to do it? Any and all feedback will be greatly appreciated!