CS8900a problems (very long post)
From: Kiran Vinta (ghettoman101_at_yahoo.com)
Date: 05/03/04
- Next message: Ghazan Haider: "802.11b on the cheap?"
- Previous message: Steve at fivetrees: "Re: Towards better embedded software (long"
- Next in thread: Gary Kato: "Re: CS8900a problems (very long post)"
- Reply: Gary Kato: "Re: CS8900a problems (very long post)"
- Reply: Glenn Jones: "Re: CS8900a problems (very long post)"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: 2 May 2004 21:21:53 -0700
Currently, I am trying to interface the a cs8900a to the motorola 6812
microcontroller. A desecription and schematic of the board I am using
can be found at http://www.invector.nu/iet8900.asp. Additionally, I
have been using the cs8900a in 8 bit mode (or trying to). I am able
to read from registers or any place in internal memory using the
packetpage pointer and packetpage data registers (i.e. I can read the
product ID register). My main problem is that I I am unable to
transmit any packets. I am connecting my ethernet module to my pc via
a crossover cable. On my pc, I have an ethereal packet sniffer
running to see if I was able to send anything. Right now I am able to
get a bid for transmit (the RDY4txNow bit goes high) but it will not
transmit anything. Also when I put the while loop in for the repeated
transmit, the cs8900a will not reset and the link light will not come
on. If I comment out the while loop, the reset light does come on but
it still does transmit anything. I think it either may be compiler
problems or timing issues. How long must I wait after I reset to
start transmitting anything? I've looked in cirrus's 8-bit
application note for transmitting and I've read the data *** for
transmitting many times (section 5.7). Im really stumped so any help
will be appreciated.
Motorola ports - IET 8900a pins
PORTT[7:0] - AD[7:0]
PORTJ[7:4] - D[3:0]
PORTJ[0] - AEN
PORTJ[1] - IOR
PORTJ[2] - IOW
#include "HC12.h" //port maps
#define PPPtr 0x0a //address of packet page pointer
#define PPData 0x0c //address of packet page data register
#define RxTxData 0x00 // Receive/Transmit data (port 0)
#define RxTxData1 0x02 // Receive/Transmit data (port 1)
#define TxCmd 0x04 // Transmit Command
#define TxLength 0x06 // Transmit Length
#define ISQ 0x08 // Interrupt status queue
#define bkpt asm("bgnd");
//waits a time/4 ms
void mswait(unsigned short time){
for(;time>0;time--){
TC5=TCNT+2000; // wait
TFLG1 = 0x20; // clear C5F
while((TFLG1&0x20)==0){};
}
}
void TimerInit(void){
COPCTL = 0x00; // disable COP
TIOS |= 0x20; // enable OC5
TSCR =0x80; // TEN(enable)
}
//changing the wait periods does not change the final data output
unsigned char IOread (unsigned char address)
{
unsigned char data;
DDRT = 0x00; //set port t as input
PORTJ = ((address<<4)&0xF0) | 0x07; //put address on pins
PORTJ &= ~0x01; //pulsing AEN
PORTJ &= ~0x02; //IOR
mswait(1); //wait
data = PORTT; //capture data
PORTJ |=0x02; //end pulse IOR
PORTJ |= 0x01; //end pulse AEN
return data;
}
//changing the wait periods does not change the final data output
void IOwrite (unsigned char address, unsigned char value)
{
DDRT = 0xff; //set port as output
PORTT = value; //Port T equals data value
PORTJ = ((address<<4)&0xF0) | 0x07; //put address on pins
PORTJ &= ~0x01; //pulsing AEN
PORTJ &= ~0x04; //IOwrite
PORTJ &= ~0x02;
mswait(1);
PORTJ |=0x02;
PORTJ |=0x04; //end IOW
PORTJ |= 0x01; //end pulse AEN
}
unsigned char reading; //first byte for input
unsigned char reading1; //second byte for input
unsigned char BusST0, BusST1;
unsigned char event0, event1;
void main(void){
DDRH = 0xFF; //set Port H as outputs
event0 = 0x00;
reading = 0x00; //setting reading to zero
reading1 = 0x00; //sertting reading1 to zero
COPCTL = 0x00; //disable COP
// SCI_Init(13); //initialize SCI interface
TimerInit(); //initialize timer unit
DDRJ = 0xff; //set port j as outputs
PORTJ |= 0x07; //
PORTH |= 0x01; //pulse reset
mswait(1000); //250 ms
PORTH &= ~0x01; //end pulse reset
// mswait(1);
// Configure RxCTL fo Promiscious mode, RxOK
// (1) Write 0x0104 to PacketPage Pointer
// (2) Write 0x0180 to PacketPage Data Port
IOwrite(PPPtr, 0x04);
IOwrite(PPPtr + 1, 0x01);
IOwrite(PPData, 0x80);
IOwrite(PPData + 1, 0x01);
// Set 10BaseT, SerRxOn, SerTxOn in LineCTL
// (1) Write 0x0112 to PacketPage Pointer
// (2) Write 0x00c0 to PacketPage Data Port
IOwrite(PPPtr, 0x12);
IOwrite(PPPtr + 1, 0x01);
IOwrite(PPData, 0xc0);
IOwrite(PPData + 1, 0x00);
while (1)
{
// Send the transmit command
IOwrite(TxCmd, 0xc0); //wait for whoel fram
IOwrite(TxCmd + 1, 0x00);
// 8 bytes to be sent
IOwrite(TxLength, 0x04); //sending 8 byte
IOwrite(TxLength + 1, 0x00);
IOwrite(PPPtr, 0x38); //address of busST register
IOwrite(PPPtr + 1, 0x01);
// Bid for transmit
do {
BusST0 = IOread(PPData);
BusST1 = IOread(PPData+1);
}while(!(BusST1==0x01)); //check for rdy4txnow
IOwrite(RxTxData, 0x12); //sending test data
IOwrite(RxTxData+1, 0x23);
IOwrite(RxTxData, 0x45);
IOwrite(RxTxData+1, 0x67);
IOwrite(RxTxData, 0x89);
IOwrite(RxTxData+1, 0xab);
IOwrite(RxTxData, 0xcd);
IOwrite(RxTxData+1, 0xef);
}
}
-Kiran Vinta
ps Ive talked to the invector but they are very slow in responding.
- Next message: Ghazan Haider: "802.11b on the cheap?"
- Previous message: Steve at fivetrees: "Re: Towards better embedded software (long"
- Next in thread: Gary Kato: "Re: CS8900a problems (very long post)"
- Reply: Gary Kato: "Re: CS8900a problems (very long post)"
- Reply: Glenn Jones: "Re: CS8900a problems (very long post)"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]