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: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Ez C++!
Az ANSI C az a nyelv alapja.....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

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

Hozzászólás Szerző: macsek »

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

Hozzászólás Szerző: macsek »

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: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

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?
Válasz küldése