コード例 #1
0
ファイル: SPI.cpp プロジェクト: japina/koduino
void SPIClass::begin() {
	// Start clock
	if (SPIx == SPI1)
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
	else if (SPIx == SPI2)
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
	else if (SPIx == SPI3)
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);

	pinModeAlt(SCK, GPIO_OType_PP, GPIO_PuPd_DOWN, afSCK);
	pinModeAlt(MISO, GPIO_OType_PP, GPIO_PuPd_DOWN, afMISO);
	pinModeAlt(MOSI, GPIO_OType_PP, GPIO_PuPd_DOWN, afMOSI);

	SPI_I2S_DeInit(SPIx);

	SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
	SPI_InitStructure.SPI_DataSize = dataSize;
	if(SPI_Data_Mode_Set != true) {
		//Default: SPI_MODE0
		SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
		SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
	}
	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
	if(SPI_Clock_Divider_Set != true) {
		SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
	}
	if(SPI_Bit_Order_Set != true) {
		//Default: MSBFIRST
		SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
	}
	SPI_InitStructure.SPI_CRCPolynomial = 7;

	SPI_Init(SPIx, &SPI_InitStructure);

	// FIXME: the state of these settings doesn't seem to make sense...but it works for now.
  SPI_SSOutputCmd(SPIx, ENABLE);

#if defined(SERIES_STM32F30x) || defined(SERIES_STM32F37x)
  // Info here: http://stackoverflow.com/questions/22769920/stm32f0-spi-loopback-no-data-on-miso
  if (dataSize == SPI_DataSize_16b)
    SPI_RxFIFOThresholdConfig(SPIx, SPI_RxFIFOThreshold_HF);
  else
    SPI_RxFIFOThresholdConfig(SPIx, SPI_RxFIFOThreshold_QF);
#endif

	SPI_Cmd(SPIx, ENABLE);

	SPI_Enabled = true;
}
コード例 #2
0
ファイル: Encoder.cpp プロジェクト: japina/koduino
void Encoder::init(uint8_t pin1, uint8_t pin2, uint16_t maxCount) {
  // NEW: read from pin config.
  timer = PIN_MAP[pin1].timer;
  pinModeAlt(pin1, GPIO_OType_PP, GPIO_PuPd_UP, PIN_MAP[pin1].altFunc);
  pinModeAlt(pin2, GPIO_OType_PP, GPIO_PuPd_UP, PIN_MAP[pin2].altFunc);

  // Start timer
  timerInitHelper(timer, 0, maxCount);

  // Configure input capture
  TIM_ICInitTypeDef TIM_ICInitStruct;
  // filter is between 0x0 and 0xF, 0 for no filter, 0xF for a lot
  TIM_ICInitStruct.TIM_ICFilter = 0x0;
  TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
  TIM_ICInit(TIMER_MAP[timer].TIMx, &TIM_ICInitStruct);
  TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;
  TIM_ICInit(TIMER_MAP[timer].TIMx, &TIM_ICInitStruct);
  TIM_EncoderInterfaceConfig(TIMER_MAP[timer].TIMx, TIM_EncoderMode_TI12, TIM_ICPolarity_Falling, TIM_ICPolarity_Falling);
  
  // Enable
  TIM_Cmd(TIMER_MAP[timer].TIMx, ENABLE);
}
コード例 #3
0
ファイル: mruby_Pi.c プロジェクト: jbreeden/mruby-wiring-pi
/* pinModeAlt
 *
 * Parameters:
 * - pin: int
 * - mode: int
 * Return Type: void
 */
mrb_value
mrb_Pi_pinModeAlt(mrb_state* mrb, mrb_value self) {
  mrb_int native_pin;
  mrb_int native_mode;

  /* Fetch the args */
  mrb_get_args(mrb, "ii", &native_pin, &native_mode);

  /* Invocation */
  pinModeAlt(native_pin, native_mode);

  return mrb_nil_value();
}
コード例 #4
0
ファイル: gpio.cpp プロジェクト: ASA1976/wiringPi-cpp
void doMode (int argc, char *argv [])
{
  int pin ;
  char *mode ;

  if (argc != 4)
  {
    fprintf (stderr, "Usage: %s mode pin mode\n", argv [0]) ;
    exit (1) ;
  }

  pin = atoi (argv [2]) ;

  mode = argv [3] ;

  /**/ if (strcasecmp (mode, "in")      == 0) pinMode         (pin, INPUT) ;
  else if (strcasecmp (mode, "input")   == 0) pinMode         (pin, INPUT) ;
  else if (strcasecmp (mode, "out")     == 0) pinMode         (pin, OUTPUT) ;
  else if (strcasecmp (mode, "output")  == 0) pinMode         (pin, OUTPUT) ;
  else if (strcasecmp (mode, "pwm")     == 0) pinMode         (pin, PWM_OUTPUT) ;
  else if (strcasecmp (mode, "pwmTone") == 0) pinMode         (pin, PWM_TONE_OUTPUT) ;
  else if (strcasecmp (mode, "clock")   == 0) pinMode         (pin, GPIO_CLOCK) ;
  else if (strcasecmp (mode, "up")      == 0) pullUpDnControl (pin, PUD_UP) ;
  else if (strcasecmp (mode, "down")    == 0) pullUpDnControl (pin, PUD_DOWN) ;
  else if (strcasecmp (mode, "tri")     == 0) pullUpDnControl (pin, PUD_OFF) ;
  else if (strcasecmp (mode, "off")     == 0) pullUpDnControl (pin, PUD_OFF) ;
  else if (strcasecmp (mode, "alt0")    == 0) pinModeAlt (pin, 0b100) ;
  else if (strcasecmp (mode, "alt1")    == 0) pinModeAlt (pin, 0b101) ;
  else if (strcasecmp (mode, "alt2")    == 0) pinModeAlt (pin, 0b110) ;
  else if (strcasecmp (mode, "alt3")    == 0) pinModeAlt (pin, 0b111) ;
  else if (strcasecmp (mode, "alt4")    == 0) pinModeAlt (pin, 0b011) ;
  else if (strcasecmp (mode, "alt5")    == 0) pinModeAlt (pin, 0b010) ;
  else
  {
    fprintf (stderr, "%s: Invalid mode: %s. Should be in/out/pwm/clock/up/down/tri\n", argv [1], mode) ;
    exit (1) ;
  }
}
コード例 #5
0
/*
 * Class:     com_pi4j_wiringpi_Gpio
 * Method:    pinModeAlt
 * Signature: (II)V
 */
JNIEXPORT void JNICALL Java_com_pi4j_wiringpi_Gpio_pinModeAlt
(JNIEnv *env, jclass obj, jint pin, jint mode)
{
	pinModeAlt(pin, mode);
}
コード例 #6
0
ファイル: bootloader.c プロジェクト: Floche/domodin
int main (void)
{
	int fSerial = 0;
	FILE * filehex;
	char hexBuf[256];
	int line = 0;

	wiringPiSetup();
	fSerial = serialOpen("/dev/ttyAMA0",115200);
	if(fSerial == -1)
	{
		printf("error while opening tty\r\n");
		return 1;
	}

	filehex = fopen("domodin.hex","r");
	if(filehex == NULL)
	{
		printf("error while opening hex file\r\n");
		return 2;
	}

	pinMode (PIN_RST, OUTPUT);
	pinMode (BOOTLOADER_PIN1, OUTPUT);
  	pinMode (BOOTLOADER_PIN2, OUTPUT);

	// Set IO to reset the PIC and to enable its bootloader
	digitalWrite (BOOTLOADER_PIN2,  LOW);
	digitalWrite (BOOTLOADER_PIN1,  HIGH);

	// reset PIC
	digitalWrite (PIN_RST, HIGH);
	delay(10);
	digitalWrite(PIN_RST, LOW);

	// disable the bootloader mode
	delay(10);
	digitalWrite(BOOTLOADER_PIN1, LOW);

	serialFlush(fSerial);
	while(fgets(hexBuf, sizeof(hexBuf), filehex) != NULL)
  	{
		// only transmit HEX file lines with proper start code (':' character)
		if(hexBuf[0] != ':') continue;

		// transmit
		serialPuts(fSerial, hexBuf);

		if(serialGetchar(fSerial) != 0x06)
		{
			printf("Error line %d !\r\n", line);
			break;
		}
		line++;
	}

	pinModeAlt (BOOTLOADER_PIN1, 0b100);
	pinModeAlt (BOOTLOADER_PIN2, 0b100);
	serialClose(fSerial);
	fclose(filehex);
	printf("New firmware loaded !\r\n");
	return 0 ;
}