uart 컨트롤을위한 mmap시 정보가 쓰여지지 않습니다.
글쓴이: erdos / 작성시간: 일, 2014/09/28 - 1:11오전
안녕하세요.
현재 uart를 컨트롤하기 위해 /dev/mem을 오픈해서 이것을 mmap 한후에
해당 uart가 할당된 메모리 주소와 레지스터들의 오프셋을 통하여 직접적 컨트롤을 하려고 하는데요.
이게 해당 주소에 접근해서 읽는것은 읽히는데 쓰여지질 않습니다.
if((fd=open("/dev/mem", O_RDWR | O_NOCTTY | O_SYNC)) ==-1) FATAL;
varMapUart0 = mmap(0,4096UL, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
EXYNOS5_PA_UART0 & ~(4096UL-1));
이런 형식으로 초기화후에
volatile uint32_t *ulcon_addr = (volatile uint32_t *)((char*)varMapUart0+ULCON0);
*ulcon_addr=0x3;
이런식으로 해당 레지스터에 접근해서 데이터를 수정하려고 하였지만, 수정되지 않았습니다.
같은 환경에서 위의 초기화코드도 동일하고 단지 메모리 주소만 수정하여 GPIO 컨트롤시 쓰기 읽기 모두 잘됩니다.
뭐가 문제인지 전혀 모르겠습니다.
물론 /dev/ttySAC 디바이스 파일과 termios 구조체를 이용하여 접근하는 방식은 잘되지만 이게 아닌 위처럼 직접적으로 메모리에 접근하는 방식으로 해보고 싶습니다.
도와주세요.
Forums:
댓글 달기