 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Ned Nov 01, 2009 3:03 pm Naslov sporočila: LPC2378 (MCB2300) ter UART težava |
|
|
Živjo!
Spet sem se "spotaknil", z glavo večkrat udaril, a nič dosegel.
Stvar je taka. Iz primera Blinky sem pobral datoteko serial.c, ki naj bi inicializiral UART0 in UART1, ter naredil en zelo kratek testni program, ki naj bi s pomočjo printf funkcije pošiljal vsebino prek rs232. Vendar se to ne zgodi. Tudi če stvar zaženem v simulatorju, ne pride do inicializacije, medtem ko v Blinky primeru pa ?! V samem blinky sem pregledal vse datoteke od začetka do konca, pa nisem našel nič takega eksplicitnega, kar bi še botrovalo k delovanju, tako da sedaj se obračam na sstrokovnjake. Še kode...
To je v bistvu main :
Koda: |
#include <LPC23XX.H>
#include "serial.c"
#include <stdio.h>
int main(void){
int x;
short y;
init_serial();
while(1){
y++;
for(x=0;x<55500;x++);
printf ("Vrednost Y:=%c \n\n", y);
if (y==255) y=0;
}
}
|
To pa je cipy/paste iz serial.c
Koda: |
/******************************************************************************/
/* SERIAL.C: Low Level Serial Routines */
/******************************************************************************/
/* This file is part of the uVision/ARM development tools. */
/* Copyright (c) 2005-2006 Keil Software. All rights reserved. */
/* This software may only be used under the terms of a valid, current, */
/* end user licence from KEIL for a compatible version of KEIL software */
/* development tools. Nothing else gives you the right to use this software. */
/******************************************************************************/
#include <LPC23xx.H> /* LPC23xx definitions */
#define UART0 /* Use UART 0 for printf */
/* If UART 0 is used for printf */
#ifdef UART0
#define UxFDR U0FDR
#define UxLCR U0LCR
#define UxDLL U0DLL
#define UxDLM U0DLM
#define UxLSR U0LSR
#define UxTHR U0THR
#define UxRBR U0RBR
/* If UART 1 is used for printf */
#elif defined(UART1)
#define UxFDR U1FDR
#define UxLCR U1LCR
#define UxDLL U1DLL
#define UxDLM U1DLM
#define UxLSR U1LSR
#define UxTHR U1THR
#define UxRBR U1RBR
#endif
void init_serial (void) { /* Initialize Serial Interface */
#ifdef UART0
PINSEL0 |= 0x00000050; /* Enable TxD0 and RxD0 */
#elif defined (UART1)
PINSEL0 |= 0x40000000; /* Enable TxD1 */
PINSEL1 |= 0x00000001; /* Enable RxD1 */
#endif
UxFDR = 0; /* Fractional divider not used */
UxLCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
UxDLL = 78; /* 9600 Baud Rate @ 12.0 MHZ PCLK */
UxDLM = 0; /* High divisor latch = 0 */
UxLCR = 0x03; /* DLAB = 0 */
}
/* Implementation of putchar (also used by printf function to output data) */
int putchar (int ch) { /* Write character to Serial Port */
while (!(UxLSR & 0x20));
return (UxTHR = ch);
}
int getkey (void) { /* Read character from Serial Port */
while (!(UxLSR & 0x01));
return (UxRBR);
}
|
Če kdo kaj opazi kje ga streljam mimo...
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Ned Nov 01, 2009 5:59 pm Naslov sporočila: |
|
|
Hmm...
ugotovil sem, da če vržem ven ukaz printf, se pravi da nebi pošiljal nič na uart, se mi v simulatorju uart lepo inicializira. Čim pa uporabim printf ali kateri drugi ukaz za pošiljanje česarkoli, se ne inicializira več?! Nevem, v čem bi bil lahko problem.
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Ned Nov 01, 2009 6:41 pm Naslov sporočila: |
|
|
Kakšne warninge ti javi toolchain?
A retarget.c prevajaš zraven?
Ta ti med drugim v bistvu zlinka funkcijo sendchar z printf.
Če nisi direktno uporabil retarget.c iz primerov,
seveda enako reč lahko napišeš sam.
_________________ Question is more important than the answer.(Plato) |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Ned Nov 01, 2009 6:51 pm Naslov sporočila: |
|
|
Ahaaaaaaa...ne tega pa res nisem ne includal, še manj pa uporabil.
Bom poskusil in poročam.
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Pon Nov 02, 2009 9:15 am Naslov sporočila: |
|
|
No, sem vključil zraven še retarget.c in stvar se je prevedla lepo, tudi v simulatorju lepo dela, UART se inicializira tako kot želim, simulacija terminalskega okna pošilja željeno, vendar na izhodu ne dobim nič. Pregledal sem vse štiri izhode, tako za vsak slučaj (Uart0-3), pa ne dobim na nobenemu izhodu ničesar? Siucer je bilo včeraj že malce pozno za se s tem igrat. Bom popoldne pogledal, kje ga biksam.
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Pon Nov 02, 2009 11:14 am Naslov sporočila: |
|
|
No, če si zadevo poštimal, da ti deluje izpis v simulatorju, bi ti moralo tudi na tvoji plati.
Ali meriš odziv na izhodu MCU-ja ali za kakšnimi RS-232 driver-ji?
_________________ Question is more important than the answer.(Plato) |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Tor Nov 03, 2009 12:10 am Naslov sporočila: |
|
|
Ufff....znoru bom...
Stvar v simulatroju dobro dela, na plati ne dobim pa nič ven. Meril sem direkt na padu za TxD0. Vse sem pustil tako kot v blinkiju...v simulatorju če odprem UART #1 okno je videti, da pošilja, v resnici se pa nič ne zgodi. Blinky deluje normalno (v kolikor bi kdo sklepal, da je kaj narobe s plato);
Main:
Koda: |
#include "retarget.c"
#include "serial.c"
#include <stdio.h>
#include <LPC23XX.H>
//extern void init_serial (void);
int main(void){
short y=0;
int bzz;
int byy;
PINSEL10 = 0;
init_serial();
while(1){
y++;
for(bzz=0;bzz<65000;bzz++){
for(byy=0;byy<6;byy++){}
}
if (y==255) {y=0;}
//printf ("Vrednost Y: %c \n", y);
printf ("AD value = 0x%03x\n\r", y);
}
}
|
Celo pavzo sem podaljšal, v kolikor bi bila ta sporna, samo ni....
Serial.c
Koda: |
/******************************************************************************/
/* SERIAL.C: Low Level Serial Routines */
/******************************************************************************/
/* This file is part of the uVision/ARM development tools. */
/* Copyright (c) 2005-2006 Keil Software. All rights reserved. */
/* This software may only be used under the terms of a valid, current, */
/* end user licence from KEIL for a compatible version of KEIL software */
/* development tools. Nothing else gives you the right to use this software. */
/******************************************************************************/
#include <LPC23xx.H> /* LPC23xx definitions */
#define UART0 /* Use UART 0 for printf */
/* If UART 0 is used for printf */
#ifdef UART0
#define UxFDR U0FDR
#define UxLCR U0LCR
#define UxDLL U0DLL
#define UxDLM U0DLM
#define UxLSR U0LSR
#define UxTHR U0THR
#define UxRBR U0RBR
/* If UART 1 is used for printf */
#elif defined(UART1)
#define UxFDR U1FDR
#define UxLCR U1LCR
#define UxDLL U1DLL
#define UxDLM U1DLM
#define UxLSR U1LSR
#define UxTHR U1THR
#define UxRBR U1RBR
#endif
void init_serial (void) { /* Initialize Serial Interface */
#ifdef UART0
PINSEL0 |= 0x00000050;
/* Enable TxD0 and RxD0 */
#elif defined (UART1)
PINSEL0 |= 0x40000000; /* Enable TxD1 */
PINSEL1 |= 0x00000001; /* Enable RxD1 */
#endif
UxFDR = 0; /* Fractional divider not used */
UxLCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
UxDLL = 78; /* 9600 Baud Rate @ 12.0 MHZ PCLK */
UxDLM = 0; /* High divisor latch = 0 */
UxLCR = 0x03; /* DLAB = 0 */
}
/* Implementation of putchar (also used by printf function to output data) */
int sendchar (int ch) { /* Write character to Serial Port */
while (!(UxLSR & 0x20));
return (UxTHR = ch);
}
int getkey (void) { /* Read character from Serial Port */
while (!(UxLSR & 0x01));
return (UxRBR);
}
|
in pa retarget.c
Koda: |
/******************************************************************************/
/* RETARGET.C: 'Retarget' layer for target-dependent low level functions */
/******************************************************************************/
/* This file is part of the uVision/ARM development tools. */
/* Copyright (c) 2005-2006 Keil Software. All rights reserved. */
/* This software may only be used under the terms of a valid, current, */
/* end user licence from KEIL for a compatible version of KEIL software */
/* development tools. Nothing else gives you the right to use this software. */
/******************************************************************************/
#include <stdio.h>
#include <rt_misc.h>
#pragma import(__use_no_semihosting_swi)
extern int sendchar(int ch); /* in serial.c */
struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
int fputc(int ch, FILE *f) {
return (sendchar(ch));
}
int ferror(FILE *f) {
/* Your implementation of ferror */
return EOF;
}
void _ttywrch(int ch) {
sendchar(ch);
}
void _sys_exit(int return_code) {
label: goto label; /* endless loop */
}
|
Če kdo vidi kak feler, se priporočam...
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Tor Nov 03, 2009 12:37 am Naslov sporočila: |
|
|
alessio je napisal/a: |
Ali meriš odziv na izhodu MCU-ja ali za kakšnimi RS-232 driver-ji? |
+ še vprašanje: S čim meriš?
|
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Tor Nov 03, 2009 10:26 am Naslov sporočila: |
|
|
Vse Tx-e sem prevohal z osciloskopom. Dogajanje bi moral videti, tako kot ga vidim, če zaženem tisti Blinky primer, ki pošilja vrednost ADja. TAkrat tudi lepo vidim na UART0 paketke.
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Tor Nov 03, 2009 11:05 am Naslov sporočila: |
|
|
Hm, saj verjetno to ni problem, samo zakaj v *.c datoteke includaš *.c datoteke?
Koda: |
#include "retarget.c"
#include "serial.c" |
Includa se (če res ni hudo pametnega razloga za kaj drugačnega) samo header-je, *.h
Daj zazipaj projekt in ga pripni sem gor,
pa bom pogledal ali sprobal na svoji plati.
~Aleš
_________________ Question is more important than the answer.(Plato) |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Tor Nov 03, 2009 12:24 pm Naslov sporočila: |
|
|
Bom to naredil, ko pridem domov. Trenutno sem v službi.
Drugače so pa to te tri datoteke, ki jih uporabljam.
plata je pa mcb2300
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.33
|
Objavljeno: Tor Nov 03, 2009 2:36 pm Naslov sporočila: |
|
|
Poskusi še z UART1:
#define UART1 namesto #define UART0
Lahko, da imaš skurjen TXD0.
_________________ LP, Matjaž |
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Tor Nov 03, 2009 2:55 pm Naslov sporočila: |
|
|
Matjaž...ne pomaga. TXD0 je uredu. Kot pravim, program blinky noramlno deluje s temi nastavitvami. Tudi kak drug program, ki uporablja uart (nekaj primerov je ko je uart v interrupt načinu) in tudi to deluje. HW je ok. Po moje delam samo kaj narobe. Samo ne vem kaj...
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
tonko Član


Pridružen-a: Sob 25 Jun 2005 13:45 Prispevkov: 541 Aktiv.: 2.28 Kraj: Črnomelj
|
Objavljeno: Tor Nov 03, 2009 4:02 pm Naslov sporočila: |
|
|
Pripni kompleten UV projekt in lahko preizkusim na moji MCB2300.
|
|
Nazaj na vrh |
|
 |
RGorazd Član


Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1714 Aktiv.: 7.23 Kraj: Ig
|
Objavljeno: Tor Nov 03, 2009 8:03 pm Naslov sporočila: |
|
|
Evo RAR datoteka.
Skratka stvar ne deluje ne z UART0 in ne z UART1...
LP G
Opis: |
|
 Download |
Ime datoteke: |
COMtest.rar |
Velikost datoteke: |
69.15 KB |
Downloadano: |
14 krat |
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 496 dni
Powered by phpBB © 2001, 2005 phpBB Group
|