PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   dsPIC - Bộ điều khiển tín hiệu số 16-bit (http://www.picvietnam.com/forum/forumdisplay.php?f=29)
-   -   Xin trợ giúp về giao tiếp dsPICMC710 với dual port RAM CY7C09349AV (http://www.picvietnam.com/forum/showthread.php?t=5063)

long4 12-10-2009 05:55 PM

Xin trợ giúp về giao tiếp dsPICMC710 với dual port RAM CY7C09349AV
 
Chào các bạn,
Mình đang làm 1 cái project giao tiếp dsPIC với dual-port RAM CY7C09349AV. Đây là RAM đồng bộ, thời gian truy xuất 9ns (xin xem file đính kèm);
dsPIC MC710 được cấu hình hoạt động ở 40MIPS. Vì là giao tiếp song song nên mình cấu hình cho dsPIC như sau:
dung lượng RAM: 4kx18, nhưng mình chỉ dùng 256x18, nên chỉ có 8 đường địa chỉ.
RG2-RG3: A0-A1
RG6-RG9: A2-A5
RG12-RG13: A6-A7
Data bus: dùng 16 đường trên tổng số 18 đường data của RAM, (D8 và D17 của RAM nối Vcc)
RA0-RA7: D0-D7
RD8-RD15: D9-D16
Control signals:
RA14: Clock : tín hiệu đồng bộ
RA15: RW: tín hiệu read/write
RG14: CE : Chip enable
RG15: OE: Open enable, tín hiệu này kéo xuống low khi đọc từ RAM để cho phép data xuất ra khỏi RAM
Các chân điều khiển, data và address không dùng được nối mức cao.
Tổng cộng 28 chân được dùng cho giao tiếp.

Các hàm truy xuất mình viết như sau

//my code define
#define CLK LATAbits.LATA14 //trigger every HIGH signal
#define RWL LATAbits.LATA15 //LOW for WRITE, HIGH for read
#define CE LATGbits.LATG14 //Active HIGH
#define OEL LATGbits.LATG15 //Active LOW, for read

#define Convert(add) ((add<<6)&0x3000)|((add<<4)&0x03C0)|((add<<2)&0x00 03)

#define HI 1
#define LO 0

void InitConfig(){
int16_T statRead = 0;

//Address, CE, OE output
statRead= TRISG;
TRISG = statRead&(~0xF3CC);

//Clock, RW output
statRead= TRISA;
TRISA = statRead&(0x3FFF);

CE = HI;
//OEL = LO;

/* Configuration ADCHS */
AD1PCFGL = (0);
AD1PCFGH = AD1PCFGH|(0x00C0);
AD2PCFGL = (0);

}
void ConfigRead(){
int16_T statRead = 0;

//data input
statRead= TRISA;
TRISA = statRead|(0x00FF);
statRead= TRISD;
TRISD = statRead|(0xFF00);
RWL = HI;
OEL = LO;
}

void ConfigWrite(){
int16_T statRead = 0;

//data input
statRead= TRISA;
TRISA = statRead&(~0x00FF);
statRead= TRISD;
TRISD = statRead&(~0xFF00);

RWL = LO;
OEL = HI;

}

uint16_T Read(uint8_T address){
// ConfigRead before running this code

uint16_T data;
uint8_T i;
//OEL = LO;
LATG= (LATG&0xCC33)|(Convert(address));
CLK = HI; //trigger the memory
for(i=0;i<2;i++); //wait for 1 us ??
data= (PORTD&0xFF00)|(PORTA&0x00FF); //data on the bus
CLK = LO;
return data;
}

void Write(uint8_T address, uint16_T data){
uint8_T i;
// ConfigRARDOutput before running this code
//OEL = HI;
LATG= (PORTG&0xCC33)|(Convert(address));

LATD= (PORTD&0x00FF)|(data&0xFF00); //keep RD0-RD7
LATA= (PORTA&0xFF00)|(data&0x00FF); //keep RA8-RA15
CLK = HI; //trigger the memory
for(i=0;i<2;i++); //wait for 1 us ??
CLK = LO;
}

Mình đã cố gắng thay đổi thời gian chờ của xung CLK (vòng lặp for) để đồng bộ tín hiệu nhưng vẫn không truy xuất được RAM.
Bạn nào có kinh nghiệm xin vui lòng góp ý, chân thành cảm ơn.
Positive feedbacks are welcome, thanks alot.

long4 12-10-2009 06:05 PM

mình không up file được, các bạn xem link datasheet của RAM này http://www.cypress.com/?cache=0&l=1&...1050&rid=13330

long4 14-10-2009 12:43 AM

Anh Nam ơi, check dùm em với.

tungnh 16-10-2009 11:59 AM

Bạn nên cho sơ đồ mạch (file SCH -> chuyển sang file PDF ) bạn post code lập trình dưới dạng code nhìn cho dễ.

of_dreams 29-12-2014 09:30 PM

Em chào anh! Giờ em cũng đang tìm hiểu về dual port RAM ạ! Mong a giúp đỡ
Hiện tại, em đang cần mua dual port RAM tại Việt Nam. Em có thể dùng loại nào ạ!
Em cám ơn


Múi giờ GMT. Hiện tại là 08:17 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam