Posiadam płytkę LPC2148 Education Board i mam z nią trochę problemów. Ogólnie jestem w tym zielony, bardzo zielony, a muszę przez to przebrnąć. Jak bawić się diodami czy buzzerem ogarnąłem. Z przerwaniami też sobie poradziłem. Chciałbym teraz skorzystać z UARTa (przez RS232) i padam... (piszę w CrossStudio 1.6 Build 2). Przeglądałem już to forum, także w czasie tworzenia projektu Oscilator Frequency ustawiłęm na 12Mhz, a i w Processor Definitions wrzuciłem STARTUP_FROM_RESET.
Podręcznik dla użytkownika dla tego sprzętu wrzuciłem tutaj:
#mirror1
#mirror2
Najpierw, co przynajmniej dla mnie ciekawe jest, jeśli wrzucę programik z diodami, w którym w ogóle nie zajmuję się UARTem, to na hyperterminalu pojawiają się randomowe znaczki. Jeżeli wrzucę swój programik, również rezultat jest taki sam. Dodam, że nie pojawiają się od razu tylko po ok 30-40sek i pojawiają się raz. Jeśli odłączę zasilanie od płytki i ponownie podepnę, to znów pojawią się raz. Jak w programie jest while to powinny (jeśli jest źle dobrana prędkość) pojawiać się cyklicznie, tylko, że co najwyżej nie to co oczekuje?
Co do inicjalizacji UARTa, to obliczam U0DLL i U0DLM ze wzoru:
Required_baud_rate = (clock) / (16 * Divisior_valuer)
Ponieważ nie do końca byłem pewien, jaki ten clock ma być, przeliczyłem to dla baud rate 9600 dla 12Mhz (78,13 dec czyli 0x4E) oraz na wszelki wypadek dla 60Mhz (390,63 zaokrąglając 0x187), bo taką wartość znalazłem też w instrukcji...
Mam jakiś .hex, który ma być przykładowym testowym programem do tego sprzętu, jak się go wgra i odpali, to świecą diody, LCD, itd. itp., ale jak w tym momencie w hyperterminalu wywołam połączenie to się przerywa program, jak w hyperterminalu odłączę połączenie, to na płytce program startuje od początku.
Jakie znaczenie ma ustawianie sterowanie przepływem (Xon/Xoff, sprzetowe, brak)?
To chyba wszystkie informacje, jakie mogą okazać się pomocne, by mi pomóc
Na koniec zamieszczam kod:
Jakiś pomysł? Co może być nie tak? Bo mam wrażenie, że to w ogóle się nie przesyła...
Dodam, jeszcze fragment w Startup.s stworzonym automatycznie przez CrossStudio odnośnie PLLCFG_VAL, może to też ma mieć znaczenie większe
Podręcznik dla użytkownika dla tego sprzętu wrzuciłem tutaj:
#mirror1
#mirror2
Najpierw, co przynajmniej dla mnie ciekawe jest, jeśli wrzucę programik z diodami, w którym w ogóle nie zajmuję się UARTem, to na hyperterminalu pojawiają się randomowe znaczki. Jeżeli wrzucę swój programik, również rezultat jest taki sam. Dodam, że nie pojawiają się od razu tylko po ok 30-40sek i pojawiają się raz. Jeśli odłączę zasilanie od płytki i ponownie podepnę, to znów pojawią się raz. Jak w programie jest while to powinny (jeśli jest źle dobrana prędkość) pojawiać się cyklicznie, tylko, że co najwyżej nie to co oczekuje?
Co do inicjalizacji UARTa, to obliczam U0DLL i U0DLM ze wzoru:
Required_baud_rate = (clock) / (16 * Divisior_valuer)
Ponieważ nie do końca byłem pewien, jaki ten clock ma być, przeliczyłem to dla baud rate 9600 dla 12Mhz (78,13 dec czyli 0x4E) oraz na wszelki wypadek dla 60Mhz (390,63 zaokrąglając 0x187), bo taką wartość znalazłem też w instrukcji...
Mam jakiś .hex, który ma być przykładowym testowym programem do tego sprzętu, jak się go wgra i odpali, to świecą diody, LCD, itd. itp., ale jak w tym momencie w hyperterminalu wywołam połączenie to się przerywa program, jak w hyperterminalu odłączę połączenie, to na płytce program startuje od początku.
Jakie znaczenie ma ustawianie sterowanie przepływem (Xon/Xoff, sprzetowe, brak)?
To chyba wszystkie informacje, jakie mogą okazać się pomocne, by mi pomóc
Na koniec zamieszczam kod:
#include <targets/lpc2148.h>
inline void UART_init(void)
{
PINSEL0 = 0x5;
U0LCR = 0x83; //8N1
U0DLM = 0x00;
U0DLL = 0x4E;
U0LCR = 0x03;
}
int main(void)
{
UART_init();
while(1)
{
putchar('a');
}
}
int putchar (int ch)
{
while (!(U0LSR & 0x20));
return (U0THR = ch);
}Jakiś pomysł? Co może być nie tak? Bo mam wrażenie, że to w ogóle się nie przesyła...
Dodam, jeszcze fragment w Startup.s stworzonym automatycznie przez CrossStudio odnośnie PLLCFG_VAL, może to też ma mieć znaczenie większe
#ifndef PLLCFG_VAL
#if OSCILLATOR_CLOCK_FREQUENCY==10000000
/* Fosc = 10Mhz, P = 2, M = 6 : Fcco = 240Mhz, cclk = 60Mhz */
#define PLLCFG_VAL 0x25
#elif OSCILLATOR_CLOCK_FREQUENCY==12000000
/* Fosc = 12Mhz, P = 2, M = 5 : Fcco = 240Mhz, cclk = 60Mhz */
#define PLLCFG_VAL 0x24
#elif OSCILLATOR_CLOCK_FREQUENCY==14745600
/* Fosc = 14.7456Mhz, P = 2, M = 4 : Fcco = 235.9296Mhz, cclk = 58.9824Mhz */
#define PLLCFG_VAL 0x23
#endif
#endif