abend
bin noch ein ziemlicher newbie also bitte seit nett zu mir...*gg*
zuerst einmal, was ist der unterschied zwischen RS232 und uart??kann ich ein uart-signal einfach mit meinem usbtoserial-converter empfangen?brauch ich dafür nur 2 leitungen??
ausgangssituation: ich habe ein evaluationboard mit aduc7024 (programmiere mit keil uvision 3) und generiere damit ein 3phasen pwm signal um einen linearmotor anzusteuern. funzt alles.
nun muss ich dem uC über RS232 (oder uart?!?) einen sollwert vorgeben, zu dem er fahren soll.
beim uC waren einige code examples dabei, check aba net ganz warum man da nicht einfach printf oda so nimmt?!?!?
wie funkt das mit dem empfangen auf dem uc?muss ich da jedesmal einen interrupt auslösen??
hier die 2 code examples
Code:
#include <ADuC7024.h>
void senddata(short);
void delay(int);
char hex2ascii(char);
int main (void) {
unsigned short SOMEDATA[1024];
int i;
GP0CON = 0x10000000; // enable ECLK output on P0.5
// configures GPIO to flash LED P4.2
GP4DAT = 0x04000000; // P4.2 configured as an output. LED is turned on
// Setup tx & rx pins on SPM 0 and SPM 1
GP1CON = 0x011;
// Start setting up UART at 9600bps
COMCON0 = 0x080; // Setting DLAB
COMDIV0 = 0x093; // Setting DIV0 and DIV1 to DL calculated
COMDIV1 = 0x000;
COMCON0 = 0x007; // Clearing DLAB
for (i=0; i <1024; i++)
{
SOMEDATA[i]=i;
}
while(1)
{
for (i=0; i <1024; i++)
{
senddata (SOMEDATA[i]);
}
GP4DAT ^= 0x00040000; // Complement P4.2
delay(2000);
}
}
void delay (int length)
{
while (length >=0)
length--;
}
void senddata(short to_send)
{
while(!(0x020==(COMSTA0 & 0x020))){}
COMTX = 0x0A; // output LF
while(!(0x020==(COMSTA0 & 0x020))){}
COMTX = 0x0D; // output CR
while(!(0x020==(COMSTA0 & 0x020))){}
COMTX = hex2ascii ((to_send >> 8) & 0x0F);
while(!(0x020==(COMSTA0 & 0x020))){}
COMTX = hex2ascii ((to_send >> 4) & 0x0F);
while(!(0x020==(COMSTA0 & 0x020))){}
COMTX = hex2ascii (to_send & 0x0F);
}
char hex2ascii(char toconv)
{
if (toconv<0x0A)
{
toconv += 0x30;
}
else
{
toconv += 0x37;
}
return (toconv);
}
Code:
#include <ADuC7024.h>
#define CR 0x0D
int write (int file, char * ptr, int len); // Functions used to
int getchar (void); // to output data
int putchar(int); // Write character to Serial Port
int main (void) {
unsigned char jchar = 0x30;
char output1[13] = "Hello World\n";
// Setup tx & rx pins on P1.0 and P1.1
GP1CON = 0x011;
// Start setting up UART at 9600bps
COMCON0 = 0x080; // Setting DLAB
COMDIV0 = 0x093; // Setting DIV0 and DIV1 to DL calculated
COMDIV1 = 0x000;
COMCON0 = 0x007; // Clearing DLAB
GP4DAT = 0x04000000; // P4.2 configured as an output. LED is turned on
while(1)
{
GP4DAT ^= 0x00040000; // Complement P4.2
write(0,output1,13); // Output Data
jchar = getchar(); // RX Data, Single Byte
write(0,&jchar,1); // Output Rxed Data
}
}
int putchar(int ch) { /* Write character to Serial Port */
if (ch == '\n') {
while(!(0x020==(COMSTA0 & 0x020)))
{}
COMTX = CR; /* output CR */
}
while(!(0x020==(COMSTA0 & 0x020)))
{}
return (COMTX = ch);
}
int getchar (void) { /* Read character from Serial Port */
while(!(0x01==(COMSTA0 & 0x01)))
{}
return (COMRX);
}
int write (int file, char * ptr, int len) {
int i;
for (i = 0; i < len; i++) putchar (*ptr++);
return len;
}
hoff ihr seit schlauer als ich
danke im voraus
Lesezeichen