2013-03-27 5 views
2

dsPIC33 마이크로 컨트롤러를 사용하여 여러 I2C 슬레이브 장치에서 읽으려고합니다.I2C 및 타이머 인터럽트 (타이머 1)

사용자가 타이머 인터럽트 (이 경우 timer1)를 사용하고 I2C 데이터를 수집하는 올바른 방법에 대해 조언 해 줄 수 있기를 바랍니다.

지금까지 I2C 슬레이브 장치에서 while 루프를 반복하여 데이터를 수집 할 수 있었지만 타이머 인터럽트를 추가하려고 시도한 이후 (즉, 가능한 한 빨리 수집 할 수는 없지만 자체 샘플링 속도를 적용 할 수 있습니다.) 내 I2C 소프트웨어 드라이버가 막혔습니다.

저는 매우 낮은 타이머 속도 (현재 1Hz)로 시도했으며 I2C는 표준 100KHz 속도입니다. PIC는 80MHz에서 처리 중입니다.

타이머와 I2C 모듈을 사용하는 올바른 방법은 무엇입니까? 나는 온라인으로 봐 봤는데 그것은 인터럽트 (timer1) 내에서 인터럽트 (I2C)를 가지고 timer1을 사용할 때 인터럽트 우선 순위의 문제가 될 수있는 것 같지만, 지금까지는 행운이 없습니다.

답변

0

나는 그럭저럭 내 자신의 문제를 해결할 수 있었고, 또한 상당히 빨리 처리 할 수 ​​있었던 것 같습니다.

가 인터럽트 우선 순위의 문제였다 밝혀졌다 나는 이전에 내 타이머 1이 우선 순위 7 (가장 높음)로 설정했다했다 :

IPC0bits.T1IP = 0b001; // Timer1 Interrupt priority level=1 

:

IPC0bits.T1IP = 0b111; // Timer1 Interrupt priority level=7 

우선 순위 1로 변경하여 문제를 해결 이 문제를 해결할 다른 사람에게 도움이되기를 바랍니다. 제 생각에 다른 우선 순위는 I2C 인터럽트와 충돌합니다.