1 | //Hardware Test Programm
|
2 | //DA 11/12
|
3 |
|
4 | #include <avr/io.h>
|
5 | #include "clksys_driver.h"
|
6 |
|
7 | int main(void)
|
8 | {
|
9 | // LED init
|
10 | PORTA.DIR |= (1<<PIN4); // TESTOUTPUT0 LED
|
11 | PORTA.DIR |= (1<<PIN5); // TESTOUTPUT1 LED
|
12 | PORTA.DIR |= (1<<PIN6); // TESTOUTPUT2 LED
|
13 | PORTA.DIR |= (1<<PIN7); // TESTOUTPUT3 LED
|
14 |
|
15 | // Quarz Init
|
16 | // Oszillator XOSC konfigurieren (12..16MHz, 256 clocks startup time)
|
17 | CLKSYS_XOSC_Config( OSC_FRQRANGE_12TO16_gc, false, OSC_XOSCSEL_XTAL_256CLK_gc );
|
18 | // Oszillator XOSC enable
|
19 | CLKSYS_Enable( OSC_XOSCEN_bm );
|
20 | // Warten bis der Oszillator bereit ist
|
21 | do {} while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );
|
22 | // PLL source ist XOSC, Multiplikator x2
|
23 | CLKSYS_PLL_Config( OSC_PLLSRC_XOSC_gc, 2 );
|
24 | // Enable PLL
|
25 | CLKSYS_Enable( OSC_PLLEN_bm );
|
26 | // Prescalers konfigurieren
|
27 | CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc );
|
28 | // Warten bis PLL locked
|
29 | do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 );
|
30 | // Main Clock Source ist Ausgang von PLL
|
31 | CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc );
|
32 |
|
33 | // IO Init
|
34 | PORTA.DIR &= ~(1<<PIN0); // TESTINPUT0 Taster
|
35 | PORTA.PIN0CTRL |= 0x18; // Pullup
|
36 | PORTA.DIR &= ~(1<<PIN1); // TESTINPUT1 Taster
|
37 | PORTA.PIN1CTRL |= 0x18; // Pullup
|
38 | PORTA.DIR &= ~(1<<PIN2); // TESTINPUT2 Jumper
|
39 | PORTA.PIN2CTRL |= 0x18; // Pullup
|
40 | PORTA.DIR &= ~(1<<PIN3); // TESTINPUT3 Jumper
|
41 | PORTA.PIN3CTRL |= 0x18; // Pullup
|
42 | PORTE.DIR |= (1<<PIN0); // LNA_EN cc1190
|
43 | PORTE.DIR |= (1<<PIN1); // PA_EN cc1190
|
44 | PORTE.DIR |= (1<<PIN2); // HGM cc1190
|
45 |
|
46 | //SPI Modus wählen, Vorteiler wählen , SPI aktivieren, Double Speed aktivieren, SPI Master Modus aktivieren
|
47 | SPIE.CTRL = SPI_MODE_0_gc | SPI_PRESCALER_DIV4_gc | (1<< SPI_ENABLE_bp)|(1<< SPI_CLK2X_bp) |(1<< SPI_MASTER_bp);
|
48 | // Interrupt ausschalten
|
49 | SPIE.INTCTRL = SPI_INTLVL_OFF_gc;
|
50 | // SPI Status auf 0 setzen
|
51 | SPIE.STATUS = 0;
|
52 |
|
53 | while(1)
|
54 | {
|
55 | // Taster0 abfragen
|
56 |
|
57 | if (!(PORTA.IN & 0x01))
|
58 | PORTA.OUTSET |= 0xf0;
|
59 | else
|
60 | PORTA.OUTCLR |= 0xf0;
|
61 |
|
62 | // Taster1 abfragen
|
63 |
|
64 | if (!(PORTA.IN & 0x02))
|
65 | {
|
66 | _delay_ms(10); // entprellen
|
67 | SPIE.DATA = 0b01010101; // test daten
|
68 | while(!(SPIE.STATUS & (1<<SPI_IF_bp))) // warten bis
|
69 | {
|
70 | PORTA.OUTSET |= 0xf0; // LEDs ein
|
71 | }
|
72 | PORTA.OUT &= ~0xf0; // LEDs aus
|
73 | }
|
74 |
|
75 | }
|
76 | }
|