Ez C++!
Az ANSI C az a nyelv alapja.....
ARM YAGARTO and Eclipse Project
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!
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!
ITT is körülnézhetsz. Szintén regisztrálós.
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álaszolunkkapu48 írta:Talán nem zavarlak több buta kérdéssel.
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:
Igy már könyebb a dolgom:
Még ezt nem értem mire jók a függvényekben:
Valami hiba ellenőrzés, amit be kellene fejezni?
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;
}
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.
}
Kód: Egész kijelölése
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));