임베디드 장비 부트로더 소스를 보고 있습니다.

geneven의 이미지

 GAFR1_L |= 0x000A8000;	
 GPDR1   |= 0x00000380;

코드중에 위와 같은 코드가 있는데 저 이름들을 찾아보니 선언된 변수가 아니고 그냥
#define GAFR1_L 0x5C 이런식으로 되어있는데 이렇게 해서 하드웨어에 직접 값을 넣을수 있는건가요?
일반 PC에서는 저런 코드가 안되는걸로 알고있는데요.. 참고로 장비는 하이버스사의 "어쩌구255"이었습니다

totohero의 이미지

MMU가 꺼져 있어 physical address로 접근하는 경우에는 됩니다.
MMU가 켜져 있더라도, 접근하려는 virtual address에 해당하는 physical address가 제대로 맵핑되어 있고, permission이나 alignment 문제가 없으면 접근이 됩니다. PC의 경우, 일반적으로 사용자 application은 MMU가 켜진 상태에서 HW 주소에 대한 permission이 없는 상태로 수행되므로 안되는거죠. 자세한 내용은 ARM Architecture Reference Manual의 Chapter B3 MMU를 참조하시기 바랍니다.

geneven의 이미지

자삭합니다

bushi의 이미지

소스 다시 보시지요.
적으신 대로라면 동작이 문제가 아니라 컴파일 에러가 나야 마땅합니다.

OTL

geneven의 이미지

에러 안나는데요?

bushi의 이미지

소스를 잘 못 보셨다는 말입니다.

OTL

geneven의 이미지

갑자기 아리까리하네요. 원래 C언어에서 lvalue는 변수가 와야하는데 그냥 16진수값이 오면 자동으로 메모리로 가는건지..

void SerialInit(ulong baud){
 
   // GP39, GP40, GP41À» UART(10)·Î »ç¿ëÇÑ´Ù.
   GAFR1_L |= 0x000A8000;	
   GPDR1   |= 0x00000380;
 
   // 8-bit, 1 stop, no parity ¼¼ÆÃ.
   FFLCR = 0x00000003;
 
   // Reset tx, rx FIFO. clear. FIFO enable
   FFFCR = 0x00000007;
 
   // UART Enable Interrupt
   FFIER = 0x00000040;
 
   // DLAB set=latch registers, DLAB clear=ÀÏ¹Ý Æ÷Æ®.
   FFLCR |= 0x00000080;
 
   // baud rate ¼³Á¤. 
   FFDLL = baud;
 
   // DLAB clear, ÀÏ¹Ý Æ÷Æ®·Î Àüȯ.
   FFLCR &= 0xFFFFFF7F;
 
   // Transmit Shift Register, Transmit Holding Register, FIFO¿¡ 
   // µ¥ÀÌŸ°¡ ¾øÀ»¶§±îÁö ±â´Ù¸°´Ù.
   while(! FFLSR & 0x00000040 );
 
   return;
}

헤더 파일에는 요런것들이 선언되어 있습니다

#define GPIO_BASE         0x40E00000
#define GAFR0_L           0x54
#define GAFR0_U           0x58
#define GAFR1_L            (*((volatile ulong *)(GPIO_BASE+0x5C)))
#define GAFR1_U           0x60
#define GAFR2_L           0x64
#define GAFR2_U           0x68
whiterock의 이미지

 
#define GAFR1_L            (*((volatile ulong *)(GPIO_BASE+0x5C)))
 
GAFR1_L |= 0x000A8000;	

코드를 잘 못 보신듯, 포인터 연산이네요..

흐음...

won-kyu.park의 이미지

Memory Mapped I/O에서는 칩에 특정 레지스터에 주소값을 가집니다.

#define GPIO_BASE 0x40E00000

이 부분은 연결된 코어의 기본 주소입니다.
이 주소를 기준으로 주소 번지에 따라 각 기능을 하는 레지스터를 컨트롤 할 수 있는 것입니다.
예를 들어

// GP39, GP40, GP41À» UART(10)·Î »ç¿ëÇÑ´Ù.
GAFR1_L |= 0x000A8000;
GPDR1 |= 0x00000380;

의 경우는 GPIO 39번과 41번을 세팅하는 부분이 되겠지요. 스펙이 어떻게 되는지는 모르겠지만 기본적으로 해당 Bit를 1 혹은 0으로 세팅함으로써 GPIO pin이 I/O 전압에 따라 High 또는 Low가 되겠죠.

#define GAFR1_L 0x5C

는 Base address에서 해당 레지스터의 offset 값입니다. Base address에서 해당 offset까지 이동한 위치의 레지스터를 세팅하는 동작을 하겠지요.
칩의 레지스터를 컨트롤한다고 생각하면 될 것 같습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.