FSMC 설정 중 WriteOperation이 Diable 이면 그냥 읽기만 되는 모양이다.
그래서 Enable 으로 변경하니까 문제없다.
STM32CubeMX에서 이부분을 변경하면 된다.
타이밍은 변경없이 그대로
/* Timing */
Timing.AddressSetupTime = 15;
Timing.AddressHoldTime = 15;
Timing.DataSetupTime = 255;
Timing.BusTurnAroundDuration = 15;
Timing.CLKDivision = 16;
Timing.DataLatency = 17;
Timing.AccessMode = FMC_ACCESS_MODE_A;
/* ExtTiming */
outpw(adr+wr0, 0x8000);
osDelay(200);
command(0x3,0xf);
outpw(adr+wr1, 0x0000);
outpw(adr+wr2, 0xe000);
outpw(adr+wr3, 0x0000);
expmode(0x3,0x5d08,0x497f);
accofst(0x3,0);
range(0x3,800000);
acac(0x3,1010);
dcac(0x3,1010);
acc(0x3,100);
dec(0x3,100);
startv(0x3,100);
speed(0x3,4000);
pulse(0x3,100000);
lp(0x3,0);
ep(0x3,0);
command(0xc,0xf);
outpw(adr+wr1, 0x0000);
outpw(adr+wr2, 0x0000);
outpw(adr+wr3, 0x0000);
expmode(0x4,0x5d08,0x01c4);
expmode(0x8,0x5d08,0x010c);
accofst(0xc,0);
range(0xc,800000);
acac(0xc,1010);
dcac(0xc,1010);
acc(0xc,100);
dec(0xc,100);
startv(0xc,50);
speed(0xc,40);
pulse(0xc,10);
lp(0xc,0);
outpw(adr+wr4, 0x0000);
outpw(adr+wr5, 0x0124);
acc(0x3,200);
speed(0x3,4000);
pulse(0x1,80000);
pulse(0x2,40000);
command(0x3,0x22);
MCX314AML.C 파일의 main 함수내의 초기화 코드를 사용해봤다.
mcx314al의 레지스터는 구조가 매우 독특한데...문제가 좀 있어...
어떤 레지스터 번지에 데이터를 write한 후, read 해서 제대로 값이 들어갔는지 확인할 수가 없다.
그냥 Driving command를 날려서 펄스가 나오는지 확인하는거 외에는 디버깅 방법이 없다.
적어도 Chip ID 정도는 읽어서 확인할 수 있도록은 해줘야지
일단 돌려보니까 펄스는 나온다.
우훗
댓글 없음:
댓글 쓰기