기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

Timer interrupt 내부에서

메모리 읽어서 외부로 보낼려고 하는데 Shift 연산이 많아서

1ms 이내의 resolution 이 필요한데 64ms 이상 걸리는군요..

할 수 없이 CPLD에서 shift 연산을 구현 시켜놓고(VHDL도 만만찮군요 ㅠ.ㅠ - 50%정도 구현중 : 될지 안될지도 미지수)

외부어드레스 를 배열처럼 사용할려고 하는데, 표현방법을 모르겠습니다.


CPU는 44b0x를 사용하고 있습니다.
컴파일러는 IAR 입니다.

CPLD 에서 0x06000000 ~ 0x060000ff 까지 쓸 수 있게끔 되어 있습니다.

외부 Address로

#define CPLD_WRITE  (*(volatile U16 *)0x06000000)

이렇게 지정하면  이 한번지에 대해서는

CPLD_WRITE = 0x1234;

이렇게 되는데...

CPLD_WRITE 의 어드레스를 1씩 증가 하면서 데이터를 넣을려고 합니다.


CPLD_WRITE[i] = 0x1234; <== 개념은 이런식으로 하고 싶은데

계속 에러를 뿜는군요..



고현철

2006.08.29 07:45:53
*.117.46.252

어떤 cpu인지는 모르지만, arch/arm/mach-xxxx/smdk2410.c와 같은 녀석이 있습니다. 거기 보면 mmu 세팅하는 테이블이 있습니다.

MMU setting을 해서 사용하시던지 ioremap을 사용하시기 바랍니다.

추천하는 녀석은 mmu setting입니당...

조준동

2006.09.21 23:16:37
*.61.128.11

44b0x는 MMU가 없습니다.
그리고 MMU 셋 한번도 안해 봤습니다 ^^

일단 이렇게 해결 했습니다.


#define CPLD_LED_WRITE (*(volatile U16 *)0x06000000) 선언은 이렇게


사용은

volatile U16 *gb_LEDBOARD_OUT;
gb_LEDBOARD_OUT = (&CPLD_LED_WRITE);
for(i=0; i<FRAME_H_MODULE; i++)
{
gb_LEDBOARD_OUT[gb_CurrentLine] = gb_U16FrameBuff
}


이런식으로 사용했습니다.

키포인트는

define 과

포인트 선언부의 volatile 이군요



List of Articles
번호 제목 글쓴이 날짜sort 조회 수

사용자 로그인