CMSIS - USART0 dela, USART3 pa ne.

Tu bo govora o vseh mogočih mikrokontrolerjih ne glede na tip ali zgradbo

Moderator: tilz0R

CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 16 Jun 2016, 17:12

Spoznavam se z CMSIS 5. Kontroler je LPC4357. USART0 mi dela, USART3 pa ne, in to pri isti kodi.
Verjetno sem nekje nekaj pozabil, pa ne najdem kaj.
V RTE_Device.h sem pine nastavil pravilno.


Koda: Izberi vse
#include "LPC43xx.h"
#include "pins.h"
#include "usart3.h"

extern ARM_DRIVER_USART Driver_USART3;

static osThreadId tid_UART3 = NULL;

static void USART3_callback(uint32_t event)
{
    switch (event)
    {
    case ARM_USART_EVENT_RECEIVE_COMPLETE:   
    case ARM_USART_EVENT_TRANSFER_COMPLETE:
    case ARM_USART_EVENT_SEND_COMPLETE:
    case ARM_USART_EVENT_TX_COMPLETE:
        // Success: Wakeup Thread
        osSignalSet(tid_UART3, 0x01);
        break;
 
    case ARM_USART_EVENT_RX_TIMEOUT:
         __breakpoint(0);
        break;
 
    case ARM_USART_EVENT_RX_OVERFLOW:
    case ARM_USART_EVENT_TX_UNDERFLOW:
        __breakpoint(0);  // Error: Call debugger or replace with custom error handling
        break;
    }
}

static void USART3_Thread(const void* args)
{
   static ARM_DRIVER_USART* USARTdrv = &Driver_USART3;
   int32_t ret;
   
   
   ret = USARTdrv->Initialize(USART3_callback);
   printf("  Initialize=%d\n", ret);
   
   ret = USARTdrv->PowerControl(ARM_POWER_FULL);
   printf("  PowerControl=%d\n", ret);
   
   ret = USARTdrv->Control(ARM_USART_MODE_ASYNCHRONOUS |
                                 ARM_USART_DATA_BITS_8 |
                      ARM_USART_PARITY_NONE |
                      ARM_USART_STOP_BITS_1 |
                      ARM_USART_FLOW_CONTROL_NONE, 115200);
  printf("  Control Port=%d\n", ret);
   
   ret = USARTdrv->Control (ARM_USART_CONTROL_TX, 1);
   printf("  Control TX=%d\n", ret);
   
   ret = USARTdrv->Control (ARM_USART_CONTROL_RX, 0);
  printf("  Control RX=%d\n", ret);
 
   ret = USARTdrv->Send("\nPress Enter to receive a message", 34);
   printf("  Send=%d\n", ret);
   
   osSignalSet((osThreadId)args, 0x01);
   osDelay(osWaitForever);
     
//   while (1)
//   {
//      char cmd;
//      USARTdrv->Receive(&cmd, 1);
//      osSignalWait(0x01, osWaitForever);
//      if (cmd == 10)
//      {
//         USARTdrv->Send("\nHello World!", 12);
//         osSignalWait(0x01, osWaitForever);
//      }
//   }
}
osThreadDef(USART3_Thread, osPriorityNormal, 1, 0);


void USART3_Init(osThreadId _mainThreadId)
{
   printf("usart3::osThreadCreate 'USART3'\n");
  tid_UART3 = osThreadCreate(osThread(USART3_Thread), _mainThreadId);
   osSignalWait(0x01, osWaitForever);
   printf("  id=%X\n", (int)tid_UART3);
}
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4084
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 617 krat
Prejel zahvalo: 1316 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 243

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a mujo » 16 Jun 2016, 17:18

Tega mikrokontrolerja ne poznam.
Vendar na hitro pogledano ima dva različna tipa UART periferije:
Koda: Izberi vse
One 550 UART with DMA support and full modem interface
Three 550 USARTs with DMA and synchronous mode support

Čisto možno, da USART0 in USART3 imata različen nabor registrov.
mujo
 
Prispevkov: 732
Pridružen: 21 Jan 2015, 10:50
Kraj: MB
Zahvalil se je: 1 krat
Prejel zahvalo: 145 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 17

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a igo » 16 Jun 2016, 17:28

Kaj se zgodi, če vse
case arm_usart_event_...
zamenjaš s
case arm_usart3_event_... ?
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
igo
 
Prispevkov: 1151
Pridružen: 11 Apr 2015, 13:38
Kraj: Krško
Zahvalil se je: 145 krat
Prejel zahvalo: 267 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 25

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a s54mtb » 16 Jun 2016, 17:44

Zakaj imaš pa Rx ugasnjen?

Koda: Izberi vse
ret = USARTdrv->Control (ARM_USART_CONTROL_RX, 0);
Težava sveta je, da so inteligentni ljudje polni dvomov, medtem ko so neumni polni samozavesti. (Charles Bukowski)
s54mtb
 
Prispevkov: 8166
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 1066 krat
Prejel zahvalo: 2604 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 62

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 16 Jun 2016, 20:33

@mujo - UART1 je drugačen. 0 in 3 sta ista.
@igo - to so samo konstante za evente. Tu trojke sploh ni.
@s54mtb - v bistvu me zanima samo TX in RX ne potrebujem. Sem pa tudi to poskušal.

Sumim, da zna biti problem v clocku. Driver za clock uporablja PLL1:
Koda: Izberi vse
      // Connect USART base clock to PLL1
      *usart->clk.base_clk = (1U    << 11) | (0x09U << 24) ;


V moji stari kodi sem z clock uporabljal XTAL, PLL1 pa sem imel zakomentiran. Je možno, da je PLL1 @ 204MHz nagaja?
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4084
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 617 krat
Prejel zahvalo: 1316 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 243

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a tilz0R » 16 Jun 2016, 21:18

Naj samo omenim eno dejstvo, mogoče ti kdaj pride prav, mogoče je ravno to problem pravkar.

Vsaka nova verzija Keil-a je slabša! To je dejstvo in ne subjektivno mnenje :)

Primer: 5.17 verzija, program dela OK.
Naredim update na 5.20, sprintf funkcija hardfault. Memory-ja čez glavo rezervirano, %d mi na int spremenljivko vrne hardfault. Stack zagotovo in nikakor ni problem, array-a tudi dovolj za zapis sprintf-a.
Rešitev: Downgrade na 5.17. Spet dela ok.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1480
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 16 Jun 2016, 23:49

Ni problem v clocku.

Tudi na "low level" način ga ne morem zagnati.

Koda: Izberi vse
void USART0_Init(void)
{
  /* Enable GPIO register interface clock                                     */
  LPC_CCU1->CLK_M4_GPIO_CFG |= 1;
  while (!(LPC_CCU1->CLK_M4_GPIO_STAT   & 1));
   
#if (USART == 0)
   #define LPC_USART LPC_USART0

   __PIN__SCU(ISP_RX_HWPORT,    ISP_RX_HWPIN,    PIN_DN,       ISP_RX_RX0_HWFUNC);
   __PIN__SCU(ISP_TX_HWPORT,    ISP_TX_HWPIN,    PIN_DN,       ISP_TX_TX0_HWFUNC);
   
   //LPC_CGU->BASE_UART0_CLK = (1U    << 11) | (0x06U << 24); //XTAL
   LPC_CGU->BASE_UART0_CLK = (1U    << 11) | (0x09U << 24); //PLL1
   
  /* Enable USART0 peripheral clock                                           */
  LPC_CCU2->CLK_APB0_USART0_CFG |= 1;
  while (!(LPC_CCU2->CLK_APB0_USART0_STAT & 1));

  /* Enable USART0 register interface clock                                   */
  LPC_CCU1->CLK_M4_USART0_CFG |= 1;
  while (!(LPC_CCU1->CLK_M4_USART0_STAT & 1));
   
#elif  (USART == 3)
   #define LPC_USART LPC_USART3
   __PIN__SCU(SD_TX3_HWPORT,    SD_TX3_HWPIN,    PIN_DN,       SD_TX3_TX3_HWFUNC);
   
   //LPC_CGU->BASE_UART3_CLK = (1U    << 11) | (0x06U << 24); //XTAL
   LPC_CGU->BASE_UART3_CLK = (1U    << 11) | (0x09U << 24); //PLL1
   
  /* Enable USART3 peripheral clock                                           */
  LPC_CCU2->CLK_APB2_USART3_CFG |= 1;
  while (!(LPC_CCU2->CLK_APB2_USART3_STAT & 1));

  /* Enable USART3 register interface clock                                   */
  LPC_CCU1->CLK_M4_USART3_CFG |= 1;
  while (!(LPC_CCU1->CLK_M4_USART3_STAT & 1));

   LPC_USART->ICR    = 0;   
#else
  #error "Invalid USART Configuration!"
#endif

   
//   LPC_USART->LCR    = 0x83;            // 8 bits, no Parity, 1 Stop bit, DLAB = 1
//  LPC_USART->DLL    = 4;               // 115200 Baudrate @ 12 MHz
//  LPC_USART->DLM    = 0;
//  LPC_USART->FDR    = 0x85;
//  LPC_USART->LCR    = 0x03;            // DLAB = 0

   LPC_USART->LCR    = 0x83;            // 8 bits, no Parity, 1 Stop bit, DLAB = 1
  LPC_USART->DLL    = 83;              // 115200 Baudrate @ 204000000 MHz
  LPC_USART->DLM    = 0;
  LPC_USART->FDR    = 0x31;
  LPC_USART->LCR    = 0x03;            // DLAB = 0

}
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4084
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 617 krat
Prejel zahvalo: 1316 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 243

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a borisz » 17 Jun 2016, 06:47

Si prebral errata od mikrokontrolerja? Včasih je to bolj pomemben dokument, kot datasheet.

LpB
It's never too late to have a happy childhood.
Uporabniški avatar
borisz
 
Prispevkov: 2888
Pridružen: 18 Jan 2015, 13:05
Zahvalil se je: 663 krat
Prejel zahvalo: 665 krat
Uporabnika povabil: Marholt
Število neizkoriščenih povabil: 128

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 17 Jun 2016, 07:14

S starim CMSIS mi dela. Tale novi pa me takole heca.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4084
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 617 krat
Prejel zahvalo: 1316 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 243

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 17 Jun 2016, 09:08

Sem ravnokar našel problem.

Ne vem, če si upam napisati. Mi je nerodno priznati, zakaj sem izgubil dva dneva.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4084
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 617 krat
Prejel zahvalo: 1316 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 243

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a MarkoM » 17 Jun 2016, 09:08

tilz0R je napisal/-a:Vsaka nova verzija Keil-a je slabša! To je dejstvo in ne subjektivno mnenje :)

To se pa definitivno strinjam. Včasih katera verzija vmes je katastrofa. Sem že večkrat študiral, da bi presedlal na katero drugo platformo, vendar imam precej keilovega hardwara in je preskok težaven.
MarkoM
 
Prispevkov: 755
Pridružen: 29 Jan 2015, 13:11
Kraj: Pohorje (Maribor)
Zahvalil se je: 74 krat
Prejel zahvalo: 140 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 11

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a tilz0R » 17 Jun 2016, 09:20

Kroko je napisal/-a:Sem ravnokar našel problem.

Ne vem, če si upam napisati. Mi je nerodno priznati, zakaj sem izgubil dva dneva.


Opis rešitve je po moje na forumih, kjer postaviš vprašanje obvezen :D
Pa ne zato, da bi se ti smejali (ker se mi zdi, da misliš, da se ti bomo) ampak da še kdo s podobnim problemom vidi rešitev.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1480
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a VolkD » 17 Jun 2016, 10:54

tilz0R je napisal/-a:
Kroko je napisal/-a:Sem ravnokar našel problem.

Ne vem, če si upam napisati. Mi je nerodno priznati, zakaj sem izgubil dva dneva.


Opis rešitve je po moje na forumih, kjer postaviš vprašanje obvezen :D
Pa ne zato, da bi se ti smejali (ker se mi zdi, da misliš, da se ti bomo) ampak da še kdo s podobnim problemom vidi rešitev.
Se strinjam.
Še nekaj je treba vedeti. Bolj kot je zadeva "butasta" težje jo je odkriti. Izguba dveh dni pomeni, da ni ravno butasta, ker vem za primer ( žal lasten), kjer je bilo izgubljeno malo manj kot 14 dni (napačna pot do knjižnic - je kazalo na stare verzije).
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28223
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5249 krat
Prejel zahvalo: 3650 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a eldi2011 » 17 Jun 2016, 11:41

Že pred leti se mi utrnila misel, da obstaja podobnost med znanjem in anteno.
Bolj kot imaš specializirano znanje, manj je širine..
kot pri zelo usmerjeni anteni z velikim dobitkom... :_rolling
Uporabniški avatar
eldi2011
 
Prispevkov: 2076
Pridružen: 05 Feb 2015, 01:50
Kraj: Domžale
Zahvalil se je: 755 krat
Prejel zahvalo: 297 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 127

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 17 Jun 2016, 12:24

Saj sem imel namen napisati, samo malce dramatične napetosti sem si privoščil :-)

USART0 je priključen direktno na ISP pine in je namenjen programiranju in debugiranju.
USART3 je priključen na SD konektor. Namenjen je uporabniku, saj tu lahko spremlja status naprave. Ni pa pin priključen direktno na konektor. Vmes je 74244 driver, ta pa ima na pinih 1 in 19 vhod za ENABLE... In jaz sem to pozabil...

V teh dveh dnevih (moj dan traja od 8 ure zjutraj do 3 ure ponoči) sem dobro osvežil moje poznavanje tega MCU-ja tako da čas ni bil vržen stran. Sem prepričan, da bom vse to not prinesel.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4084
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 617 krat
Prejel zahvalo: 1316 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 243


Vrni se na Hardware

Kdo je na strani

Po forumu brska: Baidu [Spider] in 1 gost