PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 12-10-2009, 05:55 PM   #1
long4
Nhập môn đệ tử
 
Tham gia ngày: Jun 2008
Bài gửi: 6
:
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 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam