title: Don't you need to dereference a pointer to do bitwise operations on a register?
body: <p>In the code below the line <code>while ((uart[2] &amp; (1&lt;&lt;6)) == 0);</code> checks if a bit has been set in a hardware register. </p>
  
  <p>My question is - the code creates a pointer <code>*uart</code> which points at the address 0x00021000. If you want to <code>&amp;</code> in (1&lt;&lt;6) should you not have to dereference the pointer?</p>
  
  <pre><code>#define UART_BASE 0x00021000
  
  void putstring(char *str) {
  
      volatile uint32_t *uart = (volatile uint32_t*) UART_BASE;
  
      while (1)
      {
          while (*str != '\0')
          {
              while ((uart[2] &amp; (1&lt;&lt;6)) == 0);
              uart[1] = *str;
              str++;
          }
      }
  }
  </code></pre>