|
Tài trợ cho PIC Vietnam |
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 |
12-10-2009, 05:55 PM | #1 |
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. |
|
|