1 | #include "AT91SAM7X256.h"
|
2 | #ifndef __ASSEMBLY__
|
3 | extern void dbgu_print_ascii(const char *buffer);
|
4 | extern void dbgu_print_hex8(unsigned long);
|
5 | #endif
|
6 | #define LED4 AT91C_PIO_PB18
|
7 | #define LED3 AT91C_PIO_PB19
|
8 | #define LED1 AT91C_PIO_PB21
|
9 | #define LED2 AT91C_PIO_PB20
|
10 | #define TRUE 1
|
11 | #define FALSE 0
|
12 | typedef unsigned char BOOL;
|
13 | typedef unsigned char BYTE;
|
14 | #include <string.h>
|
15 | #include <stdio.h>
|
16 | #include <fcntl.h>
|
17 | #include <io.h>
|
18 | #include <dev/board.h>
|
19 | #include <arch/arm.h>
|
20 | #include <dev/irqreg.h>
|
21 | #include <sys/timer.h>
|
22 | #include <sys/version.h>
|
23 | int counter;
|
24 | //+********************************************************************
|
25 | void ApiTimerIntr(void *arg)
|
26 | {
|
27 | AT91C_BASE_PIOB->PIO_CODR=LED3;
|
28 | counter++;
|
29 | }
|
30 | //+********************************************************************
|
31 | int InitApiTimer(void)
|
32 | {
|
33 | int dummy;
|
34 | outr(TC1_CCR, TC_CLKDIS);
|
35 | outr(TC1_IDR, 0xFFFFFFFF);
|
36 | dummy = inr(TC1_SR);
|
37 | outr(TC1_CMR, TC_CLKS_MCK32 | TC_CPCTRG | TC_WAVE | TC_EEVT_XC0);
|
38 | outr(TC1_RC, 0x8FF);
|
39 | outr(TC1_CCR, TC_CLKEN);
|
40 | outr(TC1_IER, TC_CPCS);
|
41 | NutRegisterIrqHandler(&sig_TC1, ApiTimerIntr, 0);
|
42 | NutIrqSetPriority(&sig_TC1, 0);
|
43 | NutIrqEnable(&sig_TC1);
|
44 | outr(TC1_CCR, TC_SWTRG);
|
45 | return 0;
|
46 | }
|
47 | //+********************************************************************
|
48 | int w_init(void){
|
49 | AT91C_BASE_PIOA->PIO_PER=AT91C_PIO_PA5;
|
50 | AT91C_BASE_PIOA->PIO_PER=AT91C_PIO_PA6;
|
51 | AT91C_BASE_PIOA->PIO_PER=AT91C_PIO_PA7;
|
52 | AT91C_BASE_PIOB->PIO_PER=LED4;
|
53 | AT91C_BASE_PIOB->PIO_OER=LED4;
|
54 | AT91C_BASE_PIOB->PIO_SODR=LED4;
|
55 | AT91C_BASE_PIOB->PIO_PER=LED3;
|
56 | AT91C_BASE_PIOB->PIO_OER=LED3;
|
57 | AT91C_BASE_PIOB->PIO_SODR=LED3;
|
58 | AT91C_BASE_PIOB->PIO_PER=LED2;
|
59 | AT91C_BASE_PIOB->PIO_OER=LED2;
|
60 | AT91C_BASE_PIOB->PIO_SODR=LED2;
|
61 | AT91C_BASE_PIOB->PIO_PER=LED1;
|
62 | AT91C_BASE_PIOB->PIO_SODR=LED1;
|
63 | AT91C_BASE_PIOB->PIO_OER=LED1;
|
64 | return 0;
|
65 | }
|
66 | //+********************************************************************
|
67 | int main(void)
|
68 | {
|
69 | u_long baud = 115200;
|
70 | int last;
|
71 | NutRegisterDevice(&DEV_DEBUG, 0, 0);
|
72 | freopen(DEV_DEBUG_NAME, "w", stdout);
|
73 | _ioctl(_fileno(stdout), UART_SETSPEED, &baud);
|
74 | printf("\n\nNut/OS %s CPU running at %lu Hz\n", NutVersionString(), NutGetCpuClock());
|
75 | printf("System Timer running at %lu ticks/s\n", NutGetTickClock());
|
76 | printf("1 second needs %lu system ticks\n", NutTimerMillisToTicks(1000));
|
77 | w_init();
|
78 | InitApiTimer();
|
79 | AT91C_BASE_PIOB->PIO_CODR=LED1;
|
80 | for(;;) {
|
81 | NutIrqDisable(&sig_TC1);
|
82 | last=counter;
|
83 | counter = 0;
|
84 | NutIrqEnable(&sig_TC1);
|
85 | printf("%d counter ticks\n", last);
|
86 | AT91C_BASE_PIOB->PIO_SODR=LED1; // blinkende led zum test (OK)
|
87 | NutSleep(1000); // Sleep 1 second.
|
88 | AT91C_BASE_PIOB->PIO_CODR=LED1; // blinkende led zum test (OK)
|
89 | NutSleep(1000); // Sleep 1 second.
|
90 | }
|
91 | }
|