Gast
#354517
Hallo, ich habe einen ATmega128 und einen CC2420 und möchte die Signale
von einem anderen CC2420 empfangen.
Die ISR soll von einem steigenden Pegel an PE4 (int4) ausgelöst werden.
Hier die wichtigsten Codeausschnitte:
volatile uint8_t packet_pending = 0;
int init(void)
{ ...
EIMSK = (1<<INT4);
EICRB |= (1<<ISC41) | (1<<ISC40);
...
}
ISR(INT4_vect) {
DISABLE_FIFOP_INT;
if(FIFOP_SET && !FIFOP_SET) {
cc_strobe(CC2420_SFLUSHRX);
cc_strobe(CC2420_SFLUSHRX);
goto out;
}
cc_strobe(CC2420_SACK);
packet_pending++;
out:
ENABLE_FIFOP_INT;
}
int main(void)
{...
init();
cc_strobe(CC2420_SRXON);
for(;;) {
wdt_reset();
if(packet_pending > 0) {
if((buffer = (struct com_buf *)malloc(sizeof(struct com_buf))) ==
NULL) {
fputs("No memory\r\n", uart);
break;
}
if(read_rx_fifo(buffer)) {
...
doch leider führt mein Programm nur manchmal die ISR und dann auch nur
einmal aus.
Mit dem Oszi sehe ich aber ständig steigende Flanken, was mach ich nur
falsch?