Interrupts...
Postat: 8 april 2007, 23:28:40
Hej!
Jag försöker få en atmega32 att vid overflow på timer2 att skriva ut en liten text på datorskärmen (seriell kommunikation). Själva interruptrutinen fungerar så långt att jag får en diod att blinka. Så fort jag vill skriva ut något blir det dock problem och ingenting händer.
Koden för seriella kommunikationen kommer från http://hubbard.engr.scu.edu/avr/avrlib/ ... ource.html
I simuleringen i avrstudio fastnar man enligt nedan:
uartReadyTx sätts i UART_INTERRUPT_HANDLER(SIG_UART_TRANS), men detta verkar inte göras så fort jag aktiverat TIMSK (nedan). Någon som har en lösning på mitt problem?
Min kod:
Jag försöker få en atmega32 att vid overflow på timer2 att skriva ut en liten text på datorskärmen (seriell kommunikation). Själva interruptrutinen fungerar så långt att jag får en diod att blinka. Så fort jag vill skriva ut något blir det dock problem och ingenting händer.
Koden för seriella kommunikationen kommer från http://hubbard.engr.scu.edu/avr/avrlib/ ... ource.html
I simuleringen i avrstudio fastnar man enligt nedan:
Kod: Markera allt
void uartSendByte(u08 txData)
{
// wait for the transmitter to be ready
while(!uartReadyTx); <=== Här
Min kod:
Kod: Markera allt
int time_count = 0;
int count2;
ISR(TIMER2_OVF_vect){ // Interrupt function
time_count++;
if(time_count == 1000){
rprintf("\n\r Interrupt!:");
PORTD = 0xFF;
}else if(time_count == 3000){
PORTD = 0x00;
time_count=0;
}
}
int main(void){
uartInit(); // initialize UART (serial port)
uartSetBaudRate(9600); // set UART speed to 9600 baud
rprintfInit(uartSendByte); // configure rprintf to use UART for output
PORTC = 0x1;
DDRD=0xFF; //output
TCCR2 = 0b000001; // TimerCounterControlRegister0 - Prescaler = 1
TCNT2 = 0x00; // TimerControl... counter start
OCR2 = 0x00;
TIMSK = TIMSK | 0b01000000;
sei(); // Enables interrupts
while(1){
}
return 0;
}