К содержимому
  1. Главная
  2. Блог
  3. Регистры ArduChip

Регистры ArduChip

25 сентября 2012 · По материалам Arducam

ArduChip — ядро платы Arducam, в качестве основного процессора в нём используется ПЛИС Altera MAX II CPLD EPM240. Главная задача ArduChip — передача данных по DMA в реальном времени между модулем камеры и ЖК-дисплеем 3.2", а также мультиплексирование шины между Arduino, камерой и дисплеем. Кроме того, ArduChip даёт расширение GPIO в стиле AVR: каждый вывод можно настроить как вход или выход, что решает проблему нехватки линий ввода-вывода на плате Arduino. Выводы GPIO можно использовать как входы и выходы сигналов-событий (триггеров).

АдресИмяРежимОписание
0 × 00DDRR/WРегистр направления данных. биты [7:6]: резерв; бит [5]: выбор входа/выхода IO5; бит [4]: выбор входа/выхода IO4; бит [3]: выбор входа/выхода IO3; бит [2]: выбор входа/выхода IO2; бит [1]: выбор входа/выхода IO1; бит [0]: выбор входа/выхода IO0. 1 = выход, 0 = вход
0 × 01PORTR/WРегистр выходного порта. Значение отражается на выводах IO0–IO5 соответственно. биты [7:6]: резерв; бит [5]: выходное значение IO5; бит [4]: выходное значение IO4; бит [3]: выходное значение IO3; бит [2]: выходное значение IO2; бит [1]: выходное значение IO1; бит [0]: выходное значение IO0. 1 = высокий уровень, 0 = низкий
0 × 03MODER/WРежим шины. Определяет, кто владеет шиной данных; владелец может быть только один. биты [7:3]: резерв; бит [2]: MCU читает шину ЖК-дисплея; бит [1]: камера пишет в шину ЖК-дисплея; бит [0]: MCU пишет в шину ЖК-дисплея
0 × 80PINROРегистр входных выводов. Значение отражает состояние выводов IO0–IO5 соответственно. биты [7:6]: резерв; бит [5]: входное значение IO5; бит [4]: входное значение IO4; бит [3]: входное значение IO3; бит [2]: входное значение IO2; бит [1]: входное значение IO1; бит [0]: входное значение IO0. 1 = высокий уровень, 0 = низкий
0 × 81TriggerROРегистр входа запуска. биты [7:2]: резерв; бит [1]: состояние кнопки съёмки, 0 = нажата, 1 = отпущена; бит [0]: сигнал начала кадра, совпадает с VSYNC
0 × 82Revision IDROбиты [7:6]: целая часть номера версии; биты [5:0]: дробная часть номера версии. ID первой выпущенной версии — 0 × 40, что означает V1.00

Примеры:

Пример записи GPIO (ArduCAM GPIO Write demo)

// ArduCAM GPIO Write demo (C)2012 Lee
// web: http://www.ArduCAM.com
// This program is a demo of how to use GPIOs in ArduCAM to turn on/off
// LEDs or trigger any ohter devices.
//
// This program requires the ArduCAM library.
//
#include <Wire.h>
#include <ArduCAM.h>
#include <avr/pgmspace.h>
#include <SoftwareSerial.h>

#define ARDUCHIP_DDR       0x00  //GPIO direction register
#define ARDUCHIP_PORT      0x01  //GPIO output register
#define ARDUCHIP_PIN       0x80  //GPIO input register
//ArduCAM(byte model,int RS, int WR, int RD, int CS)
ArduCAM myCAM(OV7670,A2,A1,A0,A3);
//Uncomment if use software serial
SoftwareSerial mySerial(8, 9); // RX, TX
void setup()
{
  mySerial.begin(9600);
  mySerial.println("hello");
  myCAM.write_reg( ARDUCHIP_DDR, 0xff);     //Set GPIO as output

}

void loop()
{
  uint8_t val = 0xff;
  uint8_t read_val;
  while(1)
  {
    delay(1000);
    myCAM.write_reg( ARDUCHIP_PORT, val);       //Output Register
    val = val ^ 0xff;                           //toggle output value
    read_val = myCAM.read_reg(ARDUCHIP_PORT);   //Read it back
    mySerial.write(read_val);
  }
  return;

}

Пример чтения GPIO (ArduCAM GPIO Read demo)

// ArduCAM GPIO Read demo (C)2012 Lee
// web: http://www.ArduCAM.com
// This program is a demo of how to use GPIOs in ArduCAM to read 
// trigger signals from any ohter devices.
//
// This program requires the ArduCAM library.
//
#include <Wire.h>
#include <ArduCAM.h>
#include <avr/pgmspace.h>
#include <SoftwareSerial.h>

#define ARDUCHIP_DDR       0x00  //GPIO direction register
#define ARDUCHIP_PORT      0x01  //GPIO output register
#define ARDUCHIP_PIN       0x80  //GPIO input register

//ArduCAM(byte model,int RS, int WR, int RD, int CS)
ArduCAM myCAM(OV7670,A2,A1,A0,A3);
//Uncomment if use software serial
SoftwareSerial mySerial(8, 9); // RX, TX
void setup()
{
  mySerial.begin(9600);
  mySerial.println("hello");
  myCAM.write_reg( ARDUCHIP_DDR, 0x00);     //Set GPIO as input
}

void loop()
{
  uint8_t temp;
  while(1)
  {
    temp = myCAM.read_reg(ARDUCHIP_PIN);      //Read from GPIO
    mySerial.write(temp);                  //Send value read from GPIO
    delay(1000);
  }
  return;

}

Ещё по теме

Запросить цену

Укажите количество — пришлём коммерческое предложение.