Hallo ich habe ein Problem mit meinem SPI Bus, denn er setzt egal ob beim simulieren, oder beim debuggen mittels mkII immer die InputRegister und nicht die out. Hier der code für den ATXMEGA128A3:
1 | int spi_init_master(unsigned char port) |
2 | {
|
3 | |
4 | PORTC_DIR |= (1<<DD4); ///SS pin as in/out must be hold high |
5 | PORTC_OUT |= (1<<DD4); //Driven high |
6 | |
7 | PORTC_DIR |= (1<<DD5); //MOSI pin as output |
8 | PORTC_DIR &= ~(1<<DD6); //MISO pin as input |
9 | PORTC_DIR |= (1<<DD7); //SCK pins as output |
10 | |
11 | |
12 | SPIC.CTRL = 0x00; |
13 | |
14 | SPIC.CTRL|=(1<<SPI_CLK2X_bp); //Doubles Frequency in Master Mode |
15 | SPIC.CTRL|=(1<<SPI_DORD_bp); //Data Order 1=LSB first |
16 | SPIC.CTRL|=(1<<SPI_MASTER_bp); //1=Master Mode |
17 | SPIC.CTRL&=~((1<<SPI_MODE0_bp)|(1<<SPI_MODE1_bp)); //SPI Mode Rising Sample, Falling Setup |
18 | SPIC.CTRL|=(1<<SPI_PRESCALER0_bp)|(1<<SPI_PRESCALER1_bp); //11=clkper/64 |
19 | |
20 | SPIC.INTCTRL|=(1<<SPI_INTLVL1_bp); //interrupt level is middle |
21 | SPIC.INTCTRL&=~(1<<SPI_INTLVL0_bp); |
22 | SPIC.CTRL|=(1<<SPI_ENABLE_bp); |
23 | |
24 | int spi_master_send(unsigned char SPI_data, unsigned char port) |
25 | |
26 | {
|
27 | |
28 | if(!spi_master_busy(0,'C',1)) |
29 | {
|
30 | SPIC.DATA|=SPI_data; // sende Daten |
31 | spi_master_busy(1,'C',0);//SPI busy |
32 | }
|
33 | }
|
34 | |
35 | |
36 | bool spi_master_busy(bool write, unsigned char port, bool read) //wenn read 1 wird gelesen bei 0 wird write geschrieben |
37 | {
|
38 | static bool SPIC_busy=0; |
39 | if(!read) |
40 | {
|
41 | SPIC_busy=write; |
42 | }
|
43 | else return SPIC_busy; |
44 | }
|
Vielen Dank im voraus