understanding meaning of | << opertation for GPIO clock in EFR32FG14

Status
Not open for further replies.

yefj

Advanced Member level 4
Joined
Sep 12, 2019
Messages
1,208
Helped
1
Reputation
2
Reaction score
3
Trophy points
38
Activity points
7,256
Hello,Inside CMU_ClockEnable(cmuClock_GPIO, true); we have cmuClock_GPIO parameter which is defined inside
em_cmu.h file and its definition is shown in code bellow.
What is the logical meaning of such expression?
how do i know a what register we write the value?

i know that | is "or" << is shift

I have tried to read and we shift at no prescale register some PRESC REG POS.what is the logical thing they are doing?
Thanks.


Code:
#if defined(CMU_HFBUSCLKEN0_GPIO)
  /** General-purpose input/output clock */
  cmuClock_GPIO = (CMU_NOPRESC_REG << CMU_PRESC_REG_POS)
                  | (CMU_NOSEL_REG << CMU_SEL_REG_POS)
                  | (CMU_HFBUSCLKEN0_EN_REG << CMU_EN_REG_POS)
                  | (_CMU_HFBUSCLKEN0_GPIO_SHIFT << CMU_EN_BIT_POS)
                  | (CMU_HFBUS_CLK_BRANCH << CMU_CLK_BRANCH_POS),
#endif
 

Attachments

  • 1676890319096.png
    9 KB · Views: 68

Hi,

this [ | ] is the OR operator
this [ << ] is the shift left operator

so doing
Code:
data = a << a_shift
     | b << b_shift

... you have four variables.
Example: Let´s say:
a = 1 = 0b00000001
a_shift = 2
b = 3 = 0b00000011
b_shift = 4

so a = 0b00000001 shifted 2 bits left becomes 0b00000100
and b = 0b00000011 shifted 4 bits left becomes 0b00110000

now do:
0b00000100 OR 0b00110000 to get 0b00110100

Klaus
 

Sorry for duplicating Klaus. The idea is to build a selection of bits but using the bit names rather than a number. The value of cmuClock is the state of bits selected by the named amount shifted the named '_POS' places.

Brian.
 

Hello Brian, Regarding the prescaler setting, i am using the register called High Frequency Clock Prescaler Register shown bellow.
i and trying to understand the logic of this register.
we have bits 8:12 which define the prescaler for HFCLK
They say presc is clock divition factor of PRESC+1
I cant understand this line if i want to prescal my frequence by 4 what values should i write for 8:12 bits in CMU_HFPRESC?
Thanks.
page 301





 

Attachments

  • 1676915460198.png
    53.2 KB · Views: 81
  • 1676922565060.png
    91.7 KB · Views: 72
  • 1676923058271.png
    17.4 KB · Views: 75

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…