ARM YAGARTO and Eclipse Project

Cortex. ARM3, ARM5, ARM7 magok, mindenféle gyártóktól. Programozás-fejlesztés-tippek.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. augusztus 14. kedd, 16:50

Ez C++!
Az ANSI C az a nyelv alapja.....

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3234
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. augusztus 14. kedd, 18:54

Már rájöttem a 40. oldal körül!
De a lényeg, a kettős kacsa csőrözést nem értettem!
Azért kérdeztem rá többször. A végén kiderült, hogy:
„Igazából ez nem rotálás, hanem shiftelés (bit-eltolás).
A rotálásnál a kimenő bitet visszatesszük a másik oldalra.
Shiftelésnél 0-k kerülnek be” << Vagyis törli az általam módosítani nem kívánt biteket!
Ezért aztán csak az adat eltolására << 3 jó,
Ahogy te javasoltad talán járhatóbb.
XXXX XXXX XXXX XXXX Beolvasom 16 bites kimeneti regisztert
& 1111 1000 0000 0111 ÉS Maszk
XXXX X000 0000 0XXX Eredmény
| 0000 0XXX XXXX X000 << 3 a ki küldendő Byte
VAGY után az eredmény mehet ki.


Megvan:
cin: Bemenet >> változó
cout: Kimenet << kifejezés
HÁP-HÁP!
:lol:

Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00
Tartózkodási hely: Bp

HozzászólásSzerző: macsek » 2012. augusztus 14. kedd, 22:57

kapu48 írta:Megtaláltam a könyvem.
C++ könyv: http://doksi.hu/get.php?lid=1051
(regisztrálni kel!)


ITT is körülnézhetsz. Szintén regisztrálós.

kapu48 írta:Talán nem zavarlak több buta kérdéssel.
8)

Ha nem buta kérdés (és eddig nem kérdeztél butákat) akkor tedd fel nyugodtan ezután is. Legföljebb nem válaszolunk :twisted:

Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00
Tartózkodási hely: Bp

HozzászólásSzerző: macsek » 2012. augusztus 14. kedd, 22:59

kapu48 írta: XXXX XXXX XXXX XXXX Beolvasom 16 bites kimeneti regisztert
& 1111 1000 0000 0111 ÉS Maszk
XXXX X000 0000 0XXX Eredmény
| 0000 0XXX XXXX X000 << 3 a ki küldendő Byte
VAGY után az eredmény mehet ki.


Igen. Tök jól megértetted.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3234
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. augusztus 15. szerda, 7:34

Közben rájöttem pont erre valók ezek a regiszterek:

GPIO port bit set/reset register (GPIOx_BSRR) (x = A..I)
Address offset: 0x18
Reset value: 0x0000 0000

Bits 31:16 BRy: Port x reset bit y (y = 0..15)
These bits are write-only and can be accessed in word, half-word or byte mode. A read to
these bits returns the value 0x0000.
0: No action on the corresponding ODRx bit
1: Resets the corresponding ODRx bit
Note: If both BSx and BRx are set, BSx has priority.

Bits 15:0 BSy: Port x set bit y (y= 0..15)
These bits are write-only and can be accessed in word, half-word or byte mode. A read to
these bits returns the value 0x0000.
0: No action on the corresponding ODRx bit
1: Sets the corresponding ODRx bit

És vannak is hozzá kezelő rutinok készen:

Kód: Egész kijelölése

/**
  * @brief  Sets the selected data port bits.
  * @note   This functions uses GPIOx_BSRR register to allow atomic read/modify
  *         accesses. In this way, there is no risk of an IRQ occurring between
  *         the read and the modify access.
  * @param  GPIOx: where x can be (A..I) to select the GPIO peripheral.
  * @param  GPIO_Pin: specifies the port bits to be written.
  *          This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
  * @retval None
  */
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));

  GPIOx->BSRRL = GPIO_Pin;
}

/**
  * @brief  Clears the selected data port bits.
  * @note   This functions uses GPIOx_BSRR register to allow atomic read/modify
  *         accesses. In this way, there is no risk of an IRQ occurring between
  *         the read and the modify access.
  * @param  GPIOx: where x can be (A..I) to select the GPIO peripheral.
  * @param  GPIO_Pin: specifies the port bits to be written.
  *          This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
  * @retval None
  */
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));

  GPIOx->BSRRH = GPIO_Pin;
}

Igy már könyebb a dolgom:

Kód: Egész kijelölése

void GLCD_Wriete(uint16_t databyte){
// Ide még kel az LCD vezérlés?
   //Törlünk egy 8 bites ablakot:
   GPIO_ResetBits(GLCD_DATA_PORT,  0x07F8);   // 0x07F8
   //És bele irjuk az adatunkat:
   databyte <<= 3;      //Balra 3 bitel
   GPIO_SetBits(GLCD_DATA_PORT, databyte);
   //Mindjárt egyszerűbb a dolgom.   
}




Még ezt nem értem mire jók a függvényekben:

Kód: Egész kijelölése

  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));

Valami hiba ellenőrzés, amit be kellene fejezni?


Vissza: “Minden, ami ARM”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég