2016-09-16 2 views
0

프로젝트 중 하나에 대해 UART 통과를 만들려고합니다. 하지만 어떻게 마이크로 컨트롤러의 핀을 묶어야하는지 알 수 없었습니다. 프로그래밍을 위해 임베디드 C & Keil을 사용하고 있습니다.마이크로 컨트롤러에서 UART 통과 생성 방법

  1. 이 목적으로 NXP p89lpc954 마이크로 컨트롤러 (8051 기반)를 사용하고 있습니다. 내가 UART 포트를 통해 센서를 제어하고있어 무화과 enter image description here

  2. 에 아래 그림과 같이

  3. 내 요구 사항입니다. 정상 작동 하에서 마이크로 컨트롤러 프로그램은 UART-1 포트를 사용하여 센서와 통신한다. 하지만 내가 micrcontroller UART-0 포트를 호스트 컴퓨터에 연결할 때 호스트 컴퓨터가 UART-0 & UART-1 사이를 통과하여 센서와 직접 통신하기를 원합니다.

아무도 우리가 어떻게 이것을 달성 할 수 있는지 생각해 볼 수 있습니까?

+0

Stack Overflow에는 많은 재능이 있지만 다른 곳에서는 더 나은 답변을 얻을 수있을 것입니다. [Electrical Engineering Stack Exchange] (http://electronics.stackexchange.com/)에서 프로그래밍 및 개발 관련 질문이있을 때 Stack Overflow로 돌아가보십시오. 나는이 주제에 대해 충분히 알지 못하지만 광범위하게 보입니다. 스택 교환 네트워크와 같은 정족수에서는 답을주지 못할 수도 있습니다. – jww

+2

@jww : ... Vinod *가 생각하는 * 소프트웨어 문제는 * 하드웨어 문제입니다. – Clifford

+0

컴퓨터를 센서에 직접 연결할 수없는 이유는 분명하지 않습니다. 하드웨어를 사용하여 누구와 통화 하는지를 해결할 수 있습니다. 데이터가 마이크로 컨트롤러를 통과해야하는 이유는 무엇입니까? – Lundin

답변

0

UART 구성 레지스터 또는 라우팅 레지스터에 UART 통과 비트가 있는지 확인하는 것이 좋습니다. 그 외에는 PC UART에서 센서 UART까지 플라이 와이어를 사용합니다.

4

한 UART를 다른 UART로 직접 투명하게 연결할 수 없습니다. 하나의 UART에서 다른 UART로 데이터를 전송할 적절한 소프트웨어를 제공해야합니다.

둘 다 UART가 동일한 보드 속도로 실행되는 경우 비교적 간단 할 수 있습니다. 하나의 UART에서 Rx 레지스터를 읽고 다른 하나의 TX 레지스터에 값을 쓸 수 있습니다 (양방향 통신의 경우도 마찬가지입니다) . UART 인터럽트 핸들러를 사용하여이를 구현하면 MCU에서 실행되는 다른 코드에 대해 투명성을 더 많이 또는 덜 가질 수 있습니다. 버퍼링을하지 않고 작동하려면 하드웨어 오버런이 발생하기 전에 UART간에 데이터를 전송할 수 있어야합니다. 하드웨어에 FIFO가 있거나 없을 수도 있기 때문에 하드웨어 버퍼링은 Rx만큼 작을 수 있습니다 레지스터 및 입력 쉬프트 레지스터 (2 바이트)를 포함한다. 이 작업을 방해 할 수있는 다른 소프트웨어 작업이 발생하면 여전히 버퍼링이 필요할 수 있습니다.

전송 속도가 다를 경우 최소한 두 포트 중 느린 속도로 버퍼링을 제공해야하며 고속 포트에서 느린 포트로 데이터를 스트리밍 할 수 없습니다. 버퍼가 고갈되지 않도록 데이터 스트림

일부 장치에서는 DMA 전송을 사용하여 소프트웨어 오버 헤드를 크게 줄일 수 있습니다 (일부는 상상할 수 없을 것입니다).

그러나 UART를 활성화하고 구성하려면 소프트웨어가 필요합니다. 하드웨어 전용 또는 간단한 "핀 핀"통과 솔루션은 없습니다.

+0

@dwelch : 이름에서 알 수 있듯이 비동기 통신에서는 작은 시계 불일치가 실제로 문제가되지 않습니다.수신기는 다음 프레임 (데이터 비트, 선택적 패리티 비트, 스톱 비트)에 대한 샘플 포인트를 결정하기 위해 각 시작 비트에서 동기화하여 클럭 속도가 +/- 5 %만큼 불일치하더라도 스트리밍이 가능합니다. 10 비트 N, 8,1 프레임 - 수신기는 단순히 송신기의 * 프레임 속도 *에서 작동합니다. 문제의 두 UART는 동일한 마이크로 컨트롤러에 있으므로 클록 도메인이 동일하기 때문에 동일한 보드 율에 대해 버퍼링이 필요하지 않을 수 있습니다. – Clifford

+0

사실, 같은 시계를 가지고 있다는 사실은 반드시 버퍼링없이 작동한다는 것을 의미하지는 않습니다. 보낸 사람이 조금 더 빠르게 작동하지만 여전히 수신 범위 내에 있으면 MCU가 적절한 타이밍이라는 생각으로 다시 보낼 수있는 것보다 단위 시간당 더 많은 문자를 생성 할 수 있습니다. 그러나 들어오는 파이프가 가득 차게 유지되면 버퍼링이 결국 오버플로되므로 문제가 해결되지 않습니다. 물론 대부분의 응용 프로그램은 파이프를 끊임없이 가득 채우지 않고 그 사이에 간격이있는 데이터 버스트가 있습니다. –

+0

@ChirsStratton : 다시 설명하겠습니다. 정지 비트는 다음 프레임을 다시 동기화 할 시간입니다. 이는 본질적으로 강제 간격입니다. UART는 시작 비트의 리딩 에지에서 다시 동기화되고 샘플 포인트가 다음 프레임의 각 비트의 명목상 중심에 도달하도록 설정합니다. UART 샘플 클록은 비트 전송 속도보다 빠르게 실행되며, 일반적으로 비트 전송 속도의 10 % 이내가되도록 5 배 속도로 실행되므로 넓은 비트 전송 속도 불일치 허용 오차가 발생합니다. – Clifford

관련 문제