Hallo!
Ich wollte mich mal in das Thema SPI einarbeiten und Daten über SPI senden...
Daten:
µC: Atmega48
F_CPU: 3686400Hz
MyAvr MK2 Board
Durch einen Tastendruck, welcher Interruptgesteuert ist, soll über SPI etwas gesendet werden.
Dazu habe ich folgendes Programm geschrieben:
sbi dient dazu ein Bit zu setzen (funktioniert auch einwandfrei) - sbi wurde in global.h definiert
Es wird überhaupt nichts gesendet. SCK und MOSI stehen permanent auf LOW.
Mir kommt vor als würde ich bei der Warteschleife in SPI_Send_Char stecken.
Worin könnte hier das Problem liegen?
Gruß
Mathias
Ich wollte mich mal in das Thema SPI einarbeiten und Daten über SPI senden...
Daten:
µC: Atmega48
F_CPU: 3686400Hz
MyAvr MK2 Board
Durch einen Tastendruck, welcher Interruptgesteuert ist, soll über SPI etwas gesendet werden.
Dazu habe ich folgendes Programm geschrieben:
sbi dient dazu ein Bit zu setzen (funktioniert auch einwandfrei) - sbi wurde in global.h definiert
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include "global.h"
#define F_CPU 3686400UL
int main(void)
{
//Int1 = Input
sbi(DDRD,3);
sbi(PORTD,3);
//Output für LED
sbi(DDRC, 0);
SPI_Init();
Interrupt_Init();
sei();
while(1)
{
}
}
ISR(INT1_vect){
SPI_Send_Char(65);
}
void Interrupt_Init(){
sbi(EICRA, ISC11);
sbi(EIMSK, INT1);
sbi(EIFR, INTF1);
}
void SPI_Init(){
sbi(SPCR, SPE);
sbi(SPCR, MSTR);
sbi(SPCR, SPR0);
}
void SPI_Send_Char(unsigned char cData){
SPDR = cData;
while(!(SPSR & (1 << SPIF)));
}
Es wird überhaupt nichts gesendet. SCK und MOSI stehen permanent auf LOW.
Mir kommt vor als würde ich bei der Warteschleife in SPI_Send_Char stecken.
Worin könnte hier das Problem liegen?
Gruß
Mathias