1 | #include <avr/io.h>
|
2 | #include <inttypes.h>
|
3 |
|
4 | #include <avr/interrupt.h>
|
5 | #include <avr/signal.h>
|
6 |
|
7 | //#include <avr/pgmspace.h>
|
8 |
|
9 | #include <string.h>
|
10 | #include <stdio.h>
|
11 | #include <stdlib.h>
|
12 |
|
13 |
|
14 | #include "USART.H"
|
15 |
|
16 | #define XRAMSTART RAMEND+1 //start of external RAM = 0x0260 for
|
17 | ATmega8515
|
18 |
|
19 | #define NOP() asm volatile ("nop" ::)
|
20 |
|
21 | typedef unsigned char u08;
|
22 |
|
23 | /*######################### Prototypes #########################*/
|
24 |
|
25 | void Delay1ms(unsigned int);
|
26 | void Delay100us(unsigned char);
|
27 |
|
28 | /*##############################################################*/
|
29 |
|
30 |
|
31 | int main(void)
|
32 | {
|
33 | DDRC = 0xFF; // Port C als output
|
34 | PORTC = 0x00; // Alles auf Null
|
35 |
|
36 | DDRA = 0xFF; // Port C als output
|
37 | PORTA = 0x00; // Alles auf Null
|
38 |
|
39 | DDRD = 0XFF; // Port D als output
|
40 | PORTD = 0X00 ;
|
41 |
|
42 | outp( (1<<SRE)| (1<<SRW10) ,MCUCR);
|
43 |
|
44 |
|
45 | unsigned char *p; //pointer to RAM
|
46 | unsigned char volatile c; //you have to use volatile for c=*p++;
|
47 | unsigned char i,len=0,j;
|
48 |
|
49 | unsigned char buffer[20];
|
50 | unsigned char buffer2[30];
|
51 | unsigned char
|
52 | buffer3[]={'T','h','o','m','a','s','.','M'};
|
53 | //unsigned char buffer3[]={22,33,11,55,66,99,44,00};
|
54 |
|
55 | USART_Init();
|
56 |
|
57 | sei(); // schalte interrupts an
|
58 |
|
59 | for(;;)
|
60 | {
|
61 |
|
62 | //Write SRAM
|
63 | uart_send("*\r",2);// Senden auf RS232
|
64 | Delay1ms(1000);
|
65 |
|
66 | p=(unsigned char *)XRAMSTART; //Anfangsadresse
|
67 |
|
68 | for(i=0; i<=10; i++)
|
69 | {
|
70 | *p++=buffer3[i];
|
71 | }
|
72 | //End Write SRAM
|
73 | Delay1ms(1000);
|
74 | //Verify SRAM
|
75 | uart_send("\r#",2);// Senden auf RS232
|
76 | Delay1ms(1000);
|
77 |
|
78 | p=(unsigned char *)XRAMSTART; //Anfangsadresse
|
79 | Delay1ms(500);
|
80 | for(i=0; i<=10; i++)
|
81 | {
|
82 | c = *p--;
|
83 | //c = *p++;
|
84 | buffer2[i] = c;
|
85 | }
|
86 | uart_send("\r",1);// Senden auf RS232
|
87 | for(j=0;j<=8;j++)
|
88 | {
|
89 | sprintf(buffer,"%c",buffer2[j]);
|
90 | len = strlen(buffer);
|
91 | uart_send(buffer,len);
|
92 | Delay1ms(100);
|
93 | }
|
94 |
|
95 |
|
96 |
|
97 |
|
98 | }
|
99 |
|
100 | }
|
101 |
|
102 |
|
103 | //###################################################################################
|
104 | //Nicht sonderlich genau !!
|
105 | void Delay1ms(unsigned int time)
|
106 | //###################################################################################
|
107 | {
|
108 | unsigned int i;
|
109 |
|
110 | for(i=0; i<time; i++) Delay100us(10);
|
111 | }
|
112 |
|
113 |
|
114 | //###################################################################################
|
115 | void Delay100us(unsigned char time)
|
116 | //###################################################################################
|
117 | {
|
118 | int k,l;
|
119 |
|
120 | for(k=0; k<time; k++)
|
121 | {
|
122 | for(l=0; l<40; l++)
|
123 | {
|
124 | //Ein CPU-Clock = 125us bei 8MHz
|
125 | NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
|
126 | NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
|
127 | }
|
128 | }
|
129 | }
|