PsocでACIAエミュレーターを製作する

1Oct - by Joe-90 - 0 - In 未分類

PsocでACIA(Asynchronous Communications Interface Adapter)を作成する。
まず、入力したシリアル通信の信号をパラレルにするところから始める。
プログラムと実験の回路図は以下の通り。

#include <stdio.h>
#include <stdlib.h>

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules

void wait(long int time){
  while(time--);
}

void LEDOut(int i,int j){
  if(i == 7){
    LED_P0_7_Switch(j);
  }
  if(i == 6){
    LED_P0_6_Switch(j);
  }
  if(i == 5){
    LED_P0_5_Switch(j);
  }
  if(i == 4){
    LED_P0_4_Switch(j);
  }
  if(i == 3){
    LED_P0_3_Switch(j);
  }
  if(i == 2){
    LED_P0_2_Switch(j);
  }
  if(i == 1){
    LED_P0_1_Switch(j);
  }
  if(i == 0){
    LED_P0_0_Switch(j);
  }
}

void charOUT(char* msg){
  int cnt;
  for(cnt=0;cnt<=7;cnt++){
    if(*(msg+cnt)=='1'){
      LEDOut(cnt,0);
      UART_1_CPutString("S");
      UART_1_CPutString("\r\n");
    }
  }
  wait(150000);
  for(cnt=0;cnt<=7;cnt++){
    LEDOut(cnt,1);
  }
}

void main(void){
  char* strPtr; // Parameter pointer
  char* UART_1_szGetParam(void);

  UART_1_CmdReset(); // Initialize receiver/cmd buffer
  UART_1_IntCntl(UART_1_ENABLE_RX_INT); // Enable RX interrupts
	
  Counter8_1_WritePeriod(155); // Set up baud rate generator
  Counter8_1_WriteCompareValue(77);
  Counter8_1_Start(); // Turn on baud rate generator
	
  UART_1_Start(UART_1_PARITY_NONE); // Enable UART
  M8C_EnableGInt ; // Turn on interrupts
  UART_1_CPutString("\r\n PSoC UART test program. \r\n");
	
  while(1) {
    if(UART_1_bCmdCheck()) { // Wait for command
      if(strPtr = UART_1_szGetParam()) { // More than delimiter?
        UART_1_CPutString("Found valid command\r\nCommand =>");
        UART_1_PutString(strPtr); // Print out command
        UART_1_CPutString("<\r\n");
        charOUT(strPtr);
      }
      UART_1_CmdReset(); // Reset command buffer
    }
  } 
}

説明:
wait(int);
ループを利用して目で見やすいようにプログラムの実行を中断させています。

LEDOut(int i, int j);
ポート出力を1行で行えるようにした関数です。

参考:
https://www.sgnet.co.jp/technology/c/7-5/

ポインタ型とは、変数そのものではなく変数が格納されたアドレスを指すものであり、途中の「charOUT()」関数にもあるように、ポインタ型と整数で加算すると、次の文字を指定することができる。

実際の動画