STM32Butterfly2: obsługa LCD z telefonu Nokia 6100/6610
Natomiast listing programu głównego przedstawia się następująco.
int main(void)
{
//JOY pin configuration input pullup VCC
RCC->APB2ENR |= JOY_PORT_APB2;
io_config_ext(JOY_PORT, JOY_BITS, GPIO_MODE_INPUT, GPIO_CNF_IN_PULLUP );
io_set_clr_mask( JOY_PORT, JOY_BITS, JOY_BITS );
//Initialize system timer
time_init();
//Initialize the color display
nlcd_init();
//Clear screen
nlcd_clear_screen();
//Draw initial lines
draw_hline(1,HLINE_COLOR);
draw_vline(1,VLINE_COLOR);
for(int x=1,y=1,px=1,py=1;;)
{
//Read joy state
int jstate1 = joy_keys();
wait_ms(KBD_DEBOUNCE_TIME);
int jstate2 = joy_keys();
if(jstate1 && jstate1==jstate2)
{
//If key pressed get position
switch(jstate1)
{
case JOY_U: if(y1) y--; break;
case JOY_L: if(x>1) x--; break;
case JOY_R: if(x
W pierwszym kroku przeprowadzana jest konfiguracja linii joysticka. Operacja ta odbywa się poprzez włączenie zegara dla portu GPIO, do którego podłączone są linii joysticka (ustawienie bitu w rejestrze RCC->APB2ENR), oraz konfiguracji linii jako wejścia PULLUP. Za konfigurację linii jako wejścia odpowiada funkcja io_config_ext, jako pierwszy parametr przyjmuje ona nazwę portu, drugi parametr określa konfigurowane linie, trzeci parametr czy linie są wejściowe czy wyjściowe, ostatni parametr określa tryb działania. Niezbędnym w konfiguracji linii joysticka jest podciągnięcie ich do potencjału dodatniego, które realizowane jest przez funkcję io_set_clr_mask. Funkcja ta wymaga podania trzech parametrów, pierwszy z nich określa nazwę portu, drugi określa stan ustawianych linii (bitowa wartość ‘0’ na danej pozycji zeruje linię, bitowa wartość ‘0’ na danej pozycji ustawia w stan wysoki linię), ostatni parametr jest maską blokującą zmianę stanó1) tylko do wskazanych linii.
W kolejnym kroku realizowana jest konfiguracja licznika SysTick, za działanie to odpowiada funkcja time_init(). Działanie jej sprowadza się do określenia priorytetu przerwania pochodzącego od licznika SysTick, określeniu częstotliwości występowania przerwania oraz włączenia licznika.
Następnie, poprzez wywołanie funkcji , przeprowadzana jest inicjalizacja wyświetlacza modułu KAmodTFT2. Listing funkcji został przedstawiony poniżej.
void nlcd_init(void)
{
int i;
// Hardware reset
RCC->APB2ENR |= SPI_APB2ENR_PORT | CTRL_APB2ENR_PORT;
io_config(CTRL_PORT,SCE_BIT,GPIO_MODE_50MHZ,GPIO_CNF_GPIO_PP);
io_config(CTRL_PORT,RES_BIT,GPIO_MODE_50MHZ,GPIO_CNF_GPIO_PP);
io_config(SPI_PORT,MOSI_BIT,GPIO_MODE_50MHZ,GPIO_CNF_GPIO_PP);
io_config(SPI_PORT,SCK_BIT,GPIO_MODE_50MHZ,GPIO_CNF_GPIO_PP);
sce(1);
sck(1);
mosi(1);
res(0);
for(i = 0; i < 80000; i++) nop();
res(1);
for(i = 0; i < 80000; i++) nop();
// Sleep out
transfer_spi_command(SLEEPOUT);
// Inversion on (command 0x20)
transfer_spi_command(INVOFF);
// Color Interface Pixel Format (command 0x3A)
transfer_spi_command(COLMOD);
transfer_spi_data(0x03); // 0x03 = 12 bits-per-pixel
// Memory access controler (command 0x36)
transfer_spi_command(MADCTL);
transfer_spi_data(0x50);
for(i = 0; i < 2000; i++) nop();
// Display On (command 0x29)
transfer_spi_command(DISPON);
}
W pierwszym kroku działania funkcji włączany jest zegar dla portów obsługującego linie transmisji oraz przeprowadzenie konfiguracji używanych linii przy pomocy funkcji io_config. Po przeprowadzeniu konfiguracji następuje ustawienie odpowiednich stanów na liniach SCE, SCK i MOSI. Wykonywany jest także reset wyświetlacza poprzez początkowe ustawienie linii RES w stan niski, a następnie przełączenie, po wykonaniu opóźnienia, w stan wysoki. Opóźnienie zostało zrealizowane poprzez wykonanie pętli for określoną liczbę razy w ramach, której wywoływana jest operacja nop().
Następnym działaniem jest wysłanie do wyświetlacza komend, które w pierwszej kolejności wybudzają go, wyłączają inwersje, ustawienie 12-bitowego formatu określającego kolor danego piksela (4 bity na każdy z kolorów) oraz określenie żądanego dostępu do pamięci wyświetlacza (parametr ten określa odbicie obrazu w poziomie i w pionie oraz sposób inkrementowania kolejnych komórek). Po wysłaniu powyższych poleceń następuje zatrzymanie programu na pewien czas, po którym wysyłana jest komenda włączająca wyświetlanie obrazu na wyświetlaczu.

Koniec ery defiladowej. Cykl życia technologii na froncie skrócił się do kilku tygodni
Czym jest czytnik e-booków i jak działa?
O suwerenności Europy mówią gen. Sławomir Żakowski, gen. Paweł Bielawny, dr. Jacek Pawlak, Adam Cudny i dr Daniel Więzik 




