View previous topic :: View next topic |
Author |
Message |
curry
Joined: 09 Nov 2010 Posts: 8
|
INT_RDA never fires |
Posted: Tue Nov 09, 2010 5:04 am |
|
|
Hi everybody, here is my problem.
I'm using pic18F2620 PCWHD v.4.068.
I setted up a USART , but when I send a character via Hyperterminal nothing happens, the USART never starts its IRQ. I'm getting mad trying figure it out...
I checked out the forum but nothing solved the problem...
Below is my code
Code: |
#include <18f2620.h>
#device ADC=10
#device ICD=TRUE
#include <stdlib.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,BROWNOUT,PUT,NOPROTECT,NOLVP,NOCPD
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=n,ERRORS)
#INT_RDA
void rs232(){
printf("USART fires \n");
}
void main(){
enable_interrupts(INT_RDA);
disable_interrupts(GLOBAL);
while(1){}
}
|
Please help me :-( |
|
![](templates/subSilver/images/spacer.gif) |
ralph79
Joined: 29 Aug 2007 Posts: 87
|
|
Posted: Tue Nov 09, 2010 5:11 am |
|
|
try something like this
Code: |
#include <18f2620.h>
#device adc=10
#FUSES NOWDT, WDT128, INTRC_IO, NOPROTECT, IESO, BROWNOUT, BORV42, PUT, NOCPD, STVREN, NOLVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, FCMEN, NOXINST, PBADEN, LPT1OSC, NOMCLR
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=n,ERRORS)
|
|
|
![](templates/subSilver/images/spacer.gif) |
curry
Joined: 09 Nov 2010 Posts: 8
|
|
Posted: Tue Nov 09, 2010 5:18 am |
|
|
Doesn't work.....anyway my 18F2620.h file doesn't have BORV43, I used BORV42....I don't think this is a problem..... |
|
![](templates/subSilver/images/spacer.gif) |
temtronic
Joined: 01 Jul 2010 Posts: 9171 Location: Greensville,Ontario
|
|
Posted: Tue Nov 09, 2010 6:17 am |
|
|
will it do a 'blinking LED program'?
do you have a MAX232 in the serial ports, wired correctly ?
can the 'icd=true' interfere with the serial stuff ?
does 'disable global interrupts' disable ALL the interrupts ???? |
|
![](templates/subSilver/images/spacer.gif) |
curry
Joined: 09 Nov 2010 Posts: 8
|
|
Posted: Tue Nov 09, 2010 6:43 am |
|
|
It doesn't blink a LED....I just wanna try the UART interrupt in order to use it in a bigger code.
I tried to disable ICD: the problem still remains.
Yes you're right it's not disable_interrupts(GLOBAL) but enable_interrupts(GLOBAL).
Here the corrected code:
Code: |
#include <18f2620.h>
#device ADC=10
#device ICD=TRUE
#include <stdlib.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,BROWNOUT,PUT,NOPROTECT,NOLVP,NOCPD
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=n,ERRORS)
#INT_RDA
void rs232(){
printf("USART fires \n");
}
void main(){
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(1){}
}
|
|
|
![](templates/subSilver/images/spacer.gif) |
curry
Joined: 09 Nov 2010 Posts: 8
|
|
Posted: Tue Nov 09, 2010 6:46 am |
|
|
Forgot a thing: no MAX, I use FT232RL, a USB to serial UART interface. |
|
![](templates/subSilver/images/spacer.gif) |
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Tue Nov 09, 2010 7:43 am |
|
|
Try reading the incoming char in the ISR with getchar(), and shouldnt you declare your ISR function before you define it?
also... dont print inside the ISR....set a flag... print outside when flag is set....
just my 2 cents... _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
![](templates/subSilver/images/spacer.gif) |
curry
Joined: 09 Nov 2010 Posts: 8
|
|
Posted: Tue Nov 09, 2010 8:06 am |
|
|
getchar() used.....printing outside with a flag setted in the ISR... but nothing anymore :-(
I don't need to declare the ISR function since put it in under #INT_RDA: always seen like this in thousand of examples and CCS manual |
|
![](templates/subSilver/images/spacer.gif) |
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Tue Nov 09, 2010 8:27 am |
|
|
well... i do declare my ISR function... and my code works....
i can only suggest you try it... how much time could that take?
is it not worth a try?
this is from an old program i made:
Function: void SerialInt();
Code: | #elif defined(__PCM__)
#include <16f877a.h>
#include <string.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOPUT
#use delay(clock=20000000) //must be 20 MHz
#use rs 232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // serial
void SerialInt(); // USART INT handler
int TEST_AT(); // Test Modem
int SET_MEM(); // Set used memory |
once you declare it, you still need to place it under #INT_RDA _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
![](templates/subSilver/images/spacer.gif) |
curry
Joined: 09 Nov 2010 Posts: 8
|
|
Posted: Tue Nov 09, 2010 8:46 am |
|
|
Tryed....but it doesn't work |
|
![](templates/subSilver/images/spacer.gif) |
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Tue Nov 09, 2010 9:06 am |
|
|
... do you have an O-scope? check if your comm is working properly?
blink a led on your main code to make sure you pic is running..
... i cant really think of anything else... _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
![](templates/subSilver/images/spacer.gif) |
curry
Joined: 09 Nov 2010 Posts: 8
|
|
Posted: Tue Nov 09, 2010 9:18 am |
|
|
If could be useful......I tryed to read the first character in the main, and store it in a dummy variable: suddenly the interrupt start firing with successives chars sent ...the problem now is that in this way I have to waste the first data in the dummy variable; instead when IRQ is called i need the first data to be read, in order to choose then with a switch-case statement, the portion of code to execute.....any suggestions? |
|
![](templates/subSilver/images/spacer.gif) |
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Tue Nov 09, 2010 10:08 am |
|
|
post new code.... _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
![](templates/subSilver/images/spacer.gif) |
temtronic
Joined: 01 Jul 2010 Posts: 9171 Location: Greensville,Ontario
|
|
Posted: Tue Nov 09, 2010 2:30 pm |
|
|
Since you're not using a real (old school, board level) rs232 comport but a USB converter, have you tried a loopback on the serial side and confirmed that your PC serial software is properly working through the USB-serial converter chip?
I've got two of those devices here, one works fine the other doesn't, so I have very,very little faith in those products. There's a LOT of overhead in USB and maybe it's setup is corrupted. Even Hyperterminal will confirm a simple ...press a key, send to the comport...to USB..out...loopback into
USB...back to comport...back to Hyperterminal to display the key pressed.
Also is the 'serial' side of the converter RS-232 signaling or TTL signaling? If TTL, you'll have to say 'invert' in the PICs use rs232 statement... |
|
![](templates/subSilver/images/spacer.gif) |
curry
Joined: 09 Nov 2010 Posts: 8
|
|
Posted: Wed Nov 10, 2010 1:49 am |
|
|
Solved........the pic and USB-UART interface I am using, have flow control wires tied as well: I forgot to set CTS in order to get data........
Thanks all for your tips....good work guys |
|
![](templates/subSilver/images/spacer.gif) |
|