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, 16: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: 4229
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 628 krat
Prejel zahvalo: 1368 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 253

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a mujo » 16 Jun 2016, 16: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: 733
Pridružen: 21 Jan 2015, 09:50
Kraj: MB
Zahvalil se je: 1 krat
Prejel zahvalo: 150 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 18

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a igo » 16 Jun 2016, 16: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: 1230
Pridružen: 11 Apr 2015, 12:38
Kraj: Krško
Zahvalil se je: 149 krat
Prejel zahvalo: 289 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 27

Re: CMSIS - USART0 dela, USART3 pa ne.

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

Zakaj imaš pa Rx ugasnjen?

Koda: Izberi vse
ret = USARTdrv->Control (ARM_USART_CONTROL_RX, 0);
Making raw materials do something useful since 1969.
s54mtb
 
Prispevkov: 8642
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 1149 krat
Prejel zahvalo: 2816 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 103

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 16 Jun 2016, 19: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: 4229
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 628 krat
Prejel zahvalo: 1368 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 253

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a tilz0R » 16 Jun 2016, 20: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: 1553
Pridružen: 17 Jan 2015, 23:12
Kraj: Črnomelj
Zahvalil se je: 204 krat
Prejel zahvalo: 388 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 16 Jun 2016, 22: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: 4229
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 628 krat
Prejel zahvalo: 1368 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 253

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a borisz » 17 Jun 2016, 05: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: 2996
Pridružen: 18 Jan 2015, 12:05
Zahvalil se je: 687 krat
Prejel zahvalo: 672 krat
Uporabnika povabil: Marholt
Število neizkoriščenih povabil: 129

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 17 Jun 2016, 06: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: 4229
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 628 krat
Prejel zahvalo: 1368 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 253

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 17 Jun 2016, 08: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: 4229
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 628 krat
Prejel zahvalo: 1368 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 253

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a MarkoM » 17 Jun 2016, 08: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: 792
Pridružen: 29 Jan 2015, 12:11
Kraj: Pohorje (Maribor)
Zahvalil se je: 88 krat
Prejel zahvalo: 152 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 12

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a tilz0R » 17 Jun 2016, 08: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: 1553
Pridružen: 17 Jan 2015, 23:12
Kraj: Črnomelj
Zahvalil se je: 204 krat
Prejel zahvalo: 388 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a VolkD » 17 Jun 2016, 09: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: 30262
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5742 krat
Prejel zahvalo: 3824 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a eldi2011 » 17 Jun 2016, 10: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: 2203
Pridružen: 05 Feb 2015, 00:50
Kraj: Domžale
Zahvalil se je: 797 krat
Prejel zahvalo: 320 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 138

Re: CMSIS - USART0 dela, USART3 pa ne.

OdgovorNapisal/-a Kroko » 17 Jun 2016, 11: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: 4229
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 628 krat
Prejel zahvalo: 1368 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 253


Vrni se na Hardware

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost