View previous topic :: View next topic |
Author |
Message |
kev_korea
Joined: 05 Feb 2009 Posts: 6
|
PIC24FJ128GA006 resting!!!! |
Posted: Thu Feb 05, 2009 10:14 am |
|
|
Hi Guys
I'm new with the CCS compiler just downloaded the demo.
I have written this little demo prog for the PIC24.
When I run it keeps resetting. The other compiler I have it works fine?
See code below.
I have a feeling it could be the fuse setting but cant see where.
Can anyone help please.
Code: | #include <24FJ128GA006.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOJTAG //JTAG disabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOCOE //Device will reset into operational mode
#FUSES ICS0 //ICD communication channel 0
#FUSES NOWINDIS //Watch Dog Timer in Window mode
#FUSES WPRES32 //Watch Dog Timer PreScalar 1:32
#FUSES WPOSTS1 //Watch Dog Timer PostScalar 1:1
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES FRC //Internal Fast RC Oscillator
#FUSES NOCKSFSM //Clock Switching is disabled, fail Safe clock monitor is disabled
#FUSES NOOSCIO //OSC2 is general purpose output
#FUSES NOPR //Pimary oscillaotr disabled
#use delay(clock=16000000) |
main code:
Code: |
#include "E:\proteus\scope\main.h"
unsigned int sample;
unsigned char adc_1_data[1024];
void main()
{
setup_spi(SPI_SS_DISABLED);
setup_spi2(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer1(TMR_DISABLED);
// TODO: USER CODE!!
do
{
if(sample==1024)
{
sample=0;
}
else
{
adc_1_data[sample]=input_d();
output_d(adc_1_data[sample]);
++sample;
}
}
while(1);
} |
|
|
|
kev_korea
Joined: 05 Feb 2009 Posts: 6
|
|
Posted: Thu Feb 05, 2009 10:22 am |
|
|
Sorry the variables shold have read
Code: |
unsigned long sample;
unsigned char adc_1_data[1024]; |
Forgot to add it keeps resetting @ address 0x200. |
|
|
asmallri
Joined: 12 Aug 2004 Posts: 1634 Location: Perth, Australia
|
|
Posted: Thu Feb 05, 2009 1:14 pm |
|
|
you never initialized sample so it can attempting to access an array element outside the legal address range. _________________ Regards, Andrew
http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!! |
|
|
kev_korea
Joined: 05 Feb 2009 Posts: 6
|
|
Posted: Thu Feb 05, 2009 6:53 pm |
|
|
HI asmallri
I tried that but it is still generating the two SETM 32C and SETM 32A instructions. Its the second instruction that causes the reset.
I have tried changing all the fuses but still the same.
Code: |
....................
.................... unsigned int sample =0;
*
0020C: CLR 800
.................... unsigned char adc_1_data[1024];
....................
....................
.................... void main()
.................... {
*
00200: SETM 32C
00202: SETM 32A
00204: MOV #2780,W15
00206: MOV #27FF,W0
00208: MOV W0,20
0020A: NOP |
|
|
|
FvM
Joined: 27 Aug 2008 Posts: 2337 Location: Germany
|
|
Posted: Fri Feb 06, 2009 12:51 am |
|
|
How do you check, that setm 32A causes a reset?
However, it's a non-existing SFR address with 24FJ128GA006. Accessing it possibly may cause an address trap. (I don't have the chip, so I can't try). In this case, a dummy trap handler would be a workaround to this PCD bug.
Code: | #INT_ADDRERR
void ae_isr(void)
{
} |
|
|
|
kev_korea
Joined: 05 Feb 2009 Posts: 6
|
|
Posted: Fri Feb 06, 2009 3:01 am |
|
|
I was starting to think the same it was probably a bug in PCD.
I tried generating a project with the standard fuse setting using the 24 bit wizard did the same thing.
I was using proteus to simulate the software, it did say it was a write to an illegal address
Thanks |
|
|
asmallri
Joined: 12 Aug 2004 Posts: 1634 Location: Perth, Australia
|
|
Posted: Fri Feb 06, 2009 9:04 am |
|
|
kev_korea wrote: | I was starting to think the same it was probably a bug in PCD.
I tried generating a project with the standard fuse setting using the 24 bit wizard did the same thing.
I was using proteus to simulate the software, it did say it was a write to an illegal address
Thanks |
I gave up on PCD. I spent a week trying to port a working application from C30 to PCD on the same target. The PIC would reset at a certain point. If I added code in a completely unrelated area then it would reset at some other unrelated area of code. _________________ Regards, Andrew
http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!! |
|
|
Guest
|
|
Posted: Fri Feb 06, 2009 9:38 am |
|
|
try opening up the array to 1025, |
|
|
kev_korea
Joined: 05 Feb 2009 Posts: 6
|
|
Posted: Fri Feb 06, 2009 10:25 am |
|
|
Thanks for the suggestion.
The problem is before the array is defined, if you look at the assembler output you can see that the 2 SETM instructions are at the start of "main" the very first instructions executed after the goto from power on reset.
I have generated another file with no code other that what was put in the .c file and .h file by the project wizard. Guess what it does exactly the same thing, I have played around with the fuses with no sucess.
I'm at a loss what to do next. Wanted to use CCS because it can be used with MPLAB and outputs COF files. BUT looks like I'm going to have to try else where.
But I'm still hoping |
|
|
FvM
Joined: 27 Aug 2008 Posts: 2337 Location: Germany
|
|
Posted: Fri Feb 06, 2009 12:56 pm |
|
|
PCD is working to a certain extent. As previously reported, I was able to finish a complex (>10k lines of code) application some months ago. If you aren't able to identify the bugs at the assembly level and find workarounds, you may be lost. The velocity of PCD bug fixing seems to me rather leisurely, B.T.W.
In the present case, the problem hasn't anything to do with fuses, arrays or such. The said instruction is initializing ADC input pins to default digital (no analog) setting, unfortunately, xxGA006 has less pins and don't need a AD1PCFGH register that is present with other chips. The code was apparently intended to fit all, but it doesn't. You may either want to check the workaround or continue trying unrelated means. |
|
|
kev_korea
Joined: 05 Feb 2009 Posts: 6
|
|
Posted: Fri Feb 06, 2009 7:46 pm |
|
|
FVM thanks for your reply.
I'm not quite sure what to do in the int routine as a work around.
Does anyone have an idea ? !!!!! |
|
|
FvM
Joined: 27 Aug 2008 Posts: 2337 Location: Germany
|
|
Posted: Sat Feb 07, 2009 2:27 am |
|
|
You've to do nothing in the routine. It's purpose is in keeping an unhandled address error trap from resetting the processor. Read PIC24 family reference manual about address error trap and trap conflict reset for clarification. |
|
|
|