Example #1
0
int main(void){
	rpi_init();

	printf("HelloWorld\n");
	
	return 0;
}
Example #2
0
int main(void){
	rpi_init();

	// JTAG用設定
	// 3.3V			: ARM_VREF 
	// GPIO22 (ALT4): ARM_TRST
	// GPIO4  (ALT5): ARM_TDI
	// GPIO27 (ALT4): ARM_TMS
	// GPIO25 (ALT4): ARM_TCK
	// GPIO24 (ALT4): ARM_TDO
	// GND			: ARM_GND
	pinMode(22, ALT4);
	pinMode(4, ALT5);
	pinMode(27, ALT4);
	pinMode(25, ALT4);
	pinMode(24, ALT4);

	// LED init
	pinMode(47,OUTPUT);

	printf("main: cpsr = %08x\n",getmode());

	while(1){
		digitalWrite(47, HIGH);
		delay(1000);
		digitalWrite(47, LOW);
		delay(1000);

		_swi_caller(10);
	}

	return 0;
}
Example #3
0
int main(void){
	rpi_init();

	/****	初期設定開始	***/
	// UART無効化
	*UART0_CR 	= 0;
	
	//ポートの設定
	pinMode(14,INPUT_PULLDOWN);
	pinMode(15,INPUT_PULLDOWN);
	pinMode(14,ALT0);
	pinMode(15,ALT0);

	// ボーレートの設定
	//(3000000 / (16 * 115200) = 1.627
	//(0.627*64)+0.5 = 40
	// IBRD 1 FBRD 40
	*UART0_IBRD = 1;
	*UART0_FBRD = 40;

	// LCRH
	// stick parity dis, 8bit, FIFO en, two stop bit no, odd parity, parity dis, break no
	*UART0_LCRH = 0x70;

	// CTS dis, RTS dis, OUT1-2=0, RTS dis, DTR dis, RXE en, TXE en, loop back dis, SIRLP=0, SIREN=0, UARTEN en
	*UART0_CR 	= 0x0301;
	/****	初期設定終了	***/

	
	return 0;
}
Example #4
0
int main(void){
	rpi_init();

	/****	初期設定開始	***/
	// UART無効化
	*UART0_CR 	= 0;
	
	//ポートの設定
	pinMode(14,INPUT_PULLDOWN);
	pinMode(15,INPUT_PULLDOWN);
	pinMode(14,ALT0);
	pinMode(15,ALT0);

	// ボーレートの設定
	//(3000000 / (16 * 115200) = 1.627
	//(0.627*64)+0.5 = 40
	// IBRD 1 FBRD 40
	*UART0_IBRD = 1;
	*UART0_FBRD = 40;
	
	// LCRH
	// stick parity dis, 8bit, FIFO en, two stop bit no, odd parity, parity dis, break no
	*UART0_LCRH = 0x70;

	// CR
	// CTS dis, RTS dis, OUT1-2=0, RTS dis, DTR dis, RXE en, TXE en, loop back dis, SIRLP=0, SIREN=0, UARTEN en
	*UART0_CR 	= 0x0301;
	/****	初期設定終了	***/

	char echo[256];
	int i,c,length;
	while(1){
		length = 0;

		
        // 255文字以下で改行(LF)が来るまで読み込む
        // (255文字以下の文字列を読み込む)
		do{
			// 受信FIFOにデータが来るのを待つ
			while (*UART0_FR & (1 << 4));
			// 受信データを読み込む
			c = *UART0_DR;
			echo[length] = c & 0xff;
			length++;
		}while(c != '\n' && length < 256);

		// 受け取った文字列を返信
		for(i=0;i<length;i++){
			// FIFOが空くまで待つ
			while(*UART0_FR & (0x01 << 5));
			// 1文字ずつ送る
			*UART0_DR = echo[i];
		}
	}
	
	return 0;
}
Example #5
0
int main(void){
	rpi_init();

	Timer_initialize(4000000);
	Timer_attachInterrupt(LEDblink);

	while(1);

	return 0;
}
Example #6
0
int main(void) {
    rpi_init();

    while(1) {
        // 1秒ごとにHelloWorld送信
        printf("HelloWorld\n");
        delay(1000);
    }

    return 0;
}
Example #7
0
int main(void){
	rpi_init();

	// GPIO16をOutputにセット
	*(volatile unsigned int *)GPFSEL1 = 0x01 << (3*6);
	// GPIO16をLにセット
	*(volatile unsigned int *)GPCLR0 = 0x01 << 16;

	while(1);

	return 0;
}
Example #8
0
int main(void){
	rpi_init();

	// GPIO16をOutputにセット
	pinMode(16,OUTPUT);
	// GPIO18をINPUT_PULLUPにセット
	pinMode(18,INPUT_PULLUP);
	digitalWrite(16,HIGH);

	while(1){
		// GPIO18がLOW(=ボタンが押された)ならLED点灯
		if(digitalRead(18) == LOW){
			digitalWrite(16,LOW);
		}
		else{
			digitalWrite(16,HIGH);
		}
	}

	return 0;
}
Example #9
0
int main(void){
	rpi_init();

	// debug
	pinMode(22, ALT4);
	pinMode(4, ALT5);
	pinMode(27, ALT4);
	pinMode(25, ALT4);
	pinMode(24, ALT4);

	double d=10;
	uint32_t ui = 100;

	d = (d + ui) / 1000.0;

	printf("d = %lf",d);

	while(1);

	return 0;
}
Example #10
0
int main(void){
	rpi_init();

	// システムタイマーを初期化
	*(volatile unsigned int *)SYST_CHI = 0;
	*(volatile unsigned int *)SYST_CLO = 0;

	// GPIO16をOutputにセット
	*(volatile unsigned int *)GPFSEL1 |= 0x01 << (3*6);

	while(1){
		// GPIO16をLにセット
		*(volatile unsigned int *)GPCLR0 |= 0x01 << 16;
		// wait 500ms
		delay_ms(500);
		// GPIO16をHにセット
		*(volatile unsigned int *)GPSET0 |= 0x01 << 16;
		// wait 500ms
		delay_ms(500);
	}

	return 0;
}
Example #11
0
int main(void){
	uint32_t	rawtemp;
	double		temp;

	rpi_init();
	
	// pin setting
	// SS
	pinMode( 8, ALT0);
	// MISO
	pinMode( 9, ALT0);
	// MOSI
	pinMode(10, ALT0);
	// SCLK
	pinMode(11, ALT0);


	// SPI0 configure
	*SPI0_CS = 0;
	// CSPOL0=HIGH, TA=0, CS=CS0
	*SPI0_CS |= SPI0_CS_CSPOL0_LOW | SPI0_CS_CS_CS0;
	// 送受信バッファ初期化
	*SPI0_CS |= SPI0_CS_CLEAR_ALL;
	// Clock setting
	// 3.81[kHz]
	*SPI0_CLK = 0;
	// MODE10
	*SPI0_CS |= SPI0_CS_MODE_11;


	// software reset
	// 通信開始(TA = 1)
	*SPI0_CS |= SPI0_CS_TA_ACTIVE;
	// 送信可能待ち(wait TXD)
	while(!(*SPI0_CS & SPI0_CS_TXD_MASK));
	// ソフトウェアリセット(32bit連続1書き込み)
	*SPI0_FIFO = 0xFF;
	*SPI0_FIFO = 0xFF;
	*SPI0_FIFO = 0xFF;
	*SPI0_FIFO = 0xFF;
	// 送信完了待ち
	while(!(*SPI0_CS & SPI0_CS_DONE_MASK));
	// 通信終了(TA = 0)
	*SPI0_CS &= ~SPI0_CS_TA_ACTIVE;

	delay(50);

	// Configuretionレジスタ設定
	// 通信開始(TA = 1)
	*SPI0_CS |= SPI0_CS_TA_ACTIVE;
	// 送信可能待ち(wait TXD)
	while(!(*SPI0_CS & SPI0_CS_TXD_MASK));
	// Command Byte送信
	// Resister address=0x01, Write mode
	*SPI0_FIFO = ADT7310_CMD_ADDR_CONFIG | ADT7310_CMD_WRITE;
	// Configuretion resisterをセット
	// Resolution=16bit, Oparation mode=standard
	*SPI0_FIFO = 0x80;
	// 送信完了待ち
	while(!(*SPI0_CS & SPI0_CS_DONE_MASK));
	// 通信終了(TA = 0)
	*SPI0_CS &= ~SPI0_CS_TA_ACTIVE;

	delay(500);

	// 通信開始(TA = 1)
	*SPI0_CS |= SPI0_CS_TA_ACTIVE;
	// Command Byte送信
	// Resister address=0x02, Read mode, Conrinuousモード
	*SPI0_FIFO = ADT7310_CMD_ADDR_TEMP | ADT7310_CMD_READ | ADT7310_CMD_CONRINUOUS;
	// 転送完了待ち
	while(!(*SPI0_CS & SPI0_CS_DONE_MASK));
	// 通信終了(TA = 0)
	*SPI0_CS &= ~SPI0_CS_TA_ACTIVE;

	delay(500);

	while(1){
		// init 
		rawtemp = 0;
		temp = 0.0;
		// 送受信バッファ初期化
		*SPI0_CS |= SPI0_CS_CLEAR_ALL;

		// start get temperature
		// 通信開始(TA = 1)
		*SPI0_CS |= SPI0_CS_TA_ACTIVE;
		// 温度読み込み(Conrinuousモード)
		*SPI0_FIFO = 0;
		*SPI0_FIFO = 0;

		// 受信待ち
		while(!(*SPI0_CS & SPI0_CS_RXD_MASK));
		// 上位8bit受信
		rawtemp = *SPI0_FIFO;
		rawtemp = rawtemp << 8;
		// 受信待ち
		while(!(*SPI0_CS & SPI0_CS_RXD_MASK));
		// 下位8bit受信
		rawtemp |= *SPI0_FIFO;

		// 転送完了待ち
		while(!(*SPI0_CS & SPI0_CS_DONE_MASK));

		// 通信終了(TA = 0)
		*SPI0_CS &= ~SPI0_CS_TA_ACTIVE;
		// end get temperature

		// 温度計算
		if(rawtemp & 0x8000){
			// MSBが1ならネガティブ
			temp = (rawtemp - 32768) / 128.0;
		}
		else{
			// MSBが0ならポジティブ
			temp = rawtemp / 128.0;
		}

		// temperetureレジスタ値表示
		printf("temperature register : 0x%04x\n",rawtemp);
		// 温度表示
		printf("temperature : %f (dec)\n",temp);

		// wait 3sec
		delay(3000);
	}


	return 0;
}