This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

can open a large array as 1024bytes for CY7C68013 ?

since my topic use CY7C68013+AD7934+EEPROM as directly convert an analog signal to digital and send back to PC, but for the sampling rate of 10kHz, i want to have a buffer for me to save those data...and i have tried a lot of ways for opening a large array in KeilC...
but most of the time it's not access...
can someone else tell me how to create it...
and i would wonder ask... can i allocate it @ fx2reg.h? and how to finish it up?

one of my unsuccess way...

CODE:

#pragma NOIV
#include "fx2.h"
#include "fx2regs.h"
#include "fx2sdly.h"            // SYNCDELAY macro

extern BOOL GotSUD;             // Received setup data flag
extern BOOL Sleep;
extern BOOL Rwuen;
extern BOOL Selfpwr;

BYTE Configuration;             // Current configuration
BYTE AlternateSetting;          // Alternate settings

#define VR_NAKALL_ON    0xD0
#define VR_NAKALL_OFF   0xD1

#define WB     IOD_0
#define CS     IOD_1
#define RD     IOD_2
#define WR     IOD_3
#define CONVST IOD_4
#define BUSY   IOD_5

#define ALLOCATE_EXTERN
#define START_MEM01             0x1e00
#define LENGTH_MEM01    0x200
BYTE xdata *AD0DATA[]= START_MEM01; 

void ad0(void);
void TD_Init(void)             // Called once at startup
{
.
.
.
}
void ad0(void)
{
.
.
.
        AD0DATA[count] = IOA;
        AD0DATA[count+1]= (IOB & 0x0f);
}
void T0int(void)                        //----timer 0 int----//
{
    CS=1;
    WR=1;
CONVST=1;
    OEA=0xff;
    OEB=0xff;
    TL0=0x0c;
    TH0=0xfe;
    if (count < 1023)
       count+=2;
    else
    {
        count=0;
        TR0=0;
    }
     ad0();
}
void TD_Poll(void)
{
        unsigned int i=0,j=0,loop=0;

    if(!(EP01STAT & 0x02))          //PC TO USB
    {
     if(EP1OUTBUF[0]==0x05)  // Continous sampling and Sent to PC //
                {
        freq=(EP1OUTBUF[2]<<8)+EP1OUTBUF[1];
        cycle=(EP1OUTBUF[4]<<8)+EP1OUTBUF[3];
            SYNCDELAY;
        EP1OUTBC=0x05;          // 5bytes data already be read
        SYNCDELAY;
        flag=1;
        count=0;
            TMOD=0x01;
           TL0=0x0c;
           TH0=0xfe;
        TR0=1;                  ET0=1;
        SYNCDELAY;
        times=0;
        while( times < cycle )
        {
           if(!(EP2468STAT & bmEP6FULL))                       {
           j=0;
             for(i=0;i<64;i++)
              {                                         EP6FIFOBUF[j]=AD0DATA[j];
                EP6FIFOBUF[j+1]=AD0DATA[j+1];
             j+=2;
             }
        EP6BCH = 0x00;
         SYNCDELAY;
                EP6BCL = 0x80; // arm EP6IN
         SYNCDELAY;
        }
}

Parents
  • EP2FIFOBUF[ii]=0;
    EP6FIFOBUF[ii]=0;
    AD0DATA[ii]=0;
    

    Now, you have three different 2048 element long arrays. Where are the other arrays located, and of what data type?

    But none of the code explains why you need to have your array at a specific location.

    "so...it means that...the array that i create have failed...
    but y??"

    How can you deduce that your array have failed. Exactly how can an array fail?

    But you can have an almost infinite number of problems. Do you have valid contents in the EEPROM? Is your I2C code working. Is the USB code correct? The list can go on almost indefinitely. You just have to split your problem into smaller pieces, and verify them one by one.

Reply
  • EP2FIFOBUF[ii]=0;
    EP6FIFOBUF[ii]=0;
    AD0DATA[ii]=0;
    

    Now, you have three different 2048 element long arrays. Where are the other arrays located, and of what data type?

    But none of the code explains why you need to have your array at a specific location.

    "so...it means that...the array that i create have failed...
    but y??"

    How can you deduce that your array have failed. Exactly how can an array fail?

    But you can have an almost infinite number of problems. Do you have valid contents in the EEPROM? Is your I2C code working. Is the USB code correct? The list can go on almost indefinitely. You just have to split your problem into smaller pieces, and verify them one by one.

Children