質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1423閲覧

Raspberry Piの割り込みについて

TatsuyaMorita

総合スコア55

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2022/06/21 04:00

Raspberry Pi PicoからRaspberry Pi 4Bに一定時間ごとに割り込みをかけ、spi通信をおこない、Raspberry Pi 4BのSCLKの立ち上がりで、Raspberry Pi Picoに割り込みをかけて、Raspberry Pi PicoからMSBから順に16ビット送って、SCLKの立下りで、Raspberry Pi Picoからの信号をRaspberry Pi 4Bで読み取りたいと思うのですが、Raspberry Pi PicoからRaspberry Pi 4Bへの割り込みが一回しかかからないのですが、どうすれば良いでしょうか?

Raspberry Pi Picoに書き込んだC言語とpioアセンブリのプログラムは以下のものです。

C言語

1#include <stdio.h> 2#include <string.h> 3#include <math.h> 4 5#include "hardware/gpio.h" 6#include "pico/stdlib.h" 7#include "hardware/pio.h" 8#include "hardware/clocks.h" 9 10#include "myapp.pio.h" 11 12 13#define INTERRUPT_RASPBERRY4B 28 14 15#define MISO 26 16 17 18#define RASPBERRY4B_SCLK 27 19 20void callback_MISO2(); 21void callback_MISO3(); 22void callback_MISO4(); 23void callback_MISO5(); 24void callback_MISO6(); 25void callback_MISO7(); 26void callback_MISO8(); 27void callback_MISO9(); 28void callback_MISO10(); 29void callback_MISO11(); 30void callback_MISO12(); 31void callback_MISO13(); 32void callback_MISO14(); 33void callback_MISO15(); 34void callback_MISO16(); 35 36static inline void INTERRUPT_RASPBERRY4B_select(){ 37 asm volatile("nop \n nop \n nop"); 38 gpio_put(INTERRUPT_RASPBERRY4B, 0); 39 asm volatile("nop \n nop \n nop"); 40} 41 42static inline void INTERRUPT_RASPBERRY4B_deselect(){ 43 asm volatile("nop \n nop \n nop"); 44 gpio_put(INTERRUPT_RASPBERRY4B, 1); 45 asm volatile("nop \n nop \n nop"); 46} 47 48uint bitdata1; 49uint bitdata2; 50 51void callback_MISO1(){ 52 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO1); 53 pio_sm_clear_fifos(pio1, 0); 54 55 bitdata2 = bitdata1 & 0b1000000000000000>>15; 56 57 pio_sm_put_blocking(pio1, 0, bitdata2); 58 sleep_us(10); 59 60 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO2); 61} 62 63void callback_MISO2(){ 64 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO2); 65 pio_sm_clear_fifos(pio1, 0); 66 67 bitdata2 = (bitdata1 & 0b0100000000000000)>>14; 68 69 pio_sm_put_blocking(pio1, 0, bitdata2); 70 sleep_us(10); 71 72 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO3); 73} 74 75void callback_MISO3(){ 76 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO3); 77 pio_sm_clear_fifos(pio1, 0); 78 79 bitdata2 = (bitdata1 & 0b0010000000000000)>>13; 80 81 pio_sm_put_blocking(pio1, 0, bitdata2); 82 sleep_us(10); 83 84 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO4); 85} 86 87void callback_MISO4(){ 88 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO4); 89 pio_sm_clear_fifos(pio1, 0); 90 91 bitdata2 = (bitdata1 & 0b0001000000000000)>>12; 92 93 pio_sm_put_blocking(pio1, 0, bitdata2); 94 sleep_us(10); 95 96 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO5); 97} 98 99void callback_MISO5(){ 100 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO5); 101 pio_sm_clear_fifos(pio1, 0); 102 103 bitdata2 = (bitdata1 & 0b0000100000000000)>>11; 104 105 pio_sm_put_blocking(pio1, 0, bitdata2); 106 sleep_us(10); 107 108 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO6); 109} 110 111void callback_MISO6(){ 112 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO6); 113 pio_sm_clear_fifos(pio1, 0); 114 115 bitdata2 = (bitdata1 & 0b0000010000000000)>>10; 116 117 pio_sm_put_blocking(pio1, 0, bitdata2); 118 sleep_us(10); 119 120 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO7); 121} 122 123void callback_MISO7(){ 124 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO7); 125 pio_sm_clear_fifos(pio1, 0); 126 127 bitdata2 = (bitdata1 & 0b0000001000000000)>>9; 128 129 sleep_us(10); 130 pio_sm_put_blocking(pio1, 0, bitdata2); 131 sleep_us(10); 132 133 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO8); 134} 135 136void callback_MISO8(){ 137 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO8); 138 pio_sm_clear_fifos(pio1, 0); 139 140 bitdata2 = (bitdata1 & 0b0000000100000000)>>8; 141 142 pio_sm_put_blocking(pio1, 0, bitdata2); 143 sleep_us(10); 144 145 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO9); 146} 147 148void callback_MISO9(){ 149 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO9); 150 pio_sm_clear_fifos(pio1, 0); 151 152 bitdata2 = (bitdata1 & 0b0000000010000000)>>7; 153 154 pio_sm_put_blocking(pio1, 0, bitdata2); 155 sleep_us(10); 156 157 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO10); 158} 159 160void callback_MISO10(){ 161 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO10); 162 pio_sm_clear_fifos(pio1, 0); 163 164 bitdata2 = (bitdata1 & 0b0000000001000000)>>6; 165 166 pio_sm_put_blocking(pio1, 0, bitdata2); 167 sleep_us(10); 168 169 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO11); 170} 171 172void callback_MISO11(){ 173 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO11); 174 pio_sm_clear_fifos(pio1, 0); 175 176 bitdata2 = (bitdata1 & 0b0000000000100000)>>5; 177 178 pio_sm_put_blocking(pio1, 0, bitdata2); 179 sleep_us(10); 180 181 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO12); 182} 183 184void callback_MISO12(){ 185 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO12); 186 pio_sm_clear_fifos(pio1, 0); 187 188 bitdata2 = (bitdata1 & 0b0000000000010000)>>4; 189 190 pio_sm_put_blocking(pio1, 0, bitdata2); 191 sleep_us(10); 192 193 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO13); 194} 195 196void callback_MISO13(){ 197 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO13); 198 pio_sm_clear_fifos(pio1, 0); 199 200 bitdata2 = (bitdata1 & 0b0000000000001000)>>3; 201 202 pio_sm_put_blocking(pio1, 0, bitdata2); 203 sleep_us(10); 204 205 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO14); 206} 207 208void callback_MISO14(){ 209 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO14); 210 pio_sm_clear_fifos(pio1, 0); 211 212 bitdata2 = (bitdata1 & 0b0000000000000100)>>2; 213 214 pio_sm_put_blocking(pio1, 0, bitdata2); 215 sleep_us(10); 216 217 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO15); 218} 219 220void callback_MISO15(){ 221 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO15); 222 pio_sm_clear_fifos(pio1, 0); 223 224 bitdata2 = (bitdata1 & 0b0100000000000010)>>1; 225 226 pio_sm_put_blocking(pio1, 0, bitdata2); 227 sleep_us(10); 228 229 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO16); 230} 231 232 233void callback_MISO16(){ 234 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO16); 235 pio_sm_clear_fifos(pio1, 0); 236 237 bitdata2 = bitdata1 & 0b0000000000000001; 238 239 pio_sm_put_blocking(pio1, 0, bitdata2); 240 sleep_us(10); 241 242 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO1); 243} 244 245 246 247 248 249 250 251int main() 252{ 253 stdio_init_all(); 254 255 sleep_ms(3000); 256 257 gpio_init(INTERRUPT_RASPBERRY4B); 258 gpio_set_dir(INTERRUPT_RASPBERRY4B, GPIO_OUT); 259 260 gpio_init(RASPBERRY4B_SCLK); 261 gpio_set_dir(RASPBERRY4B_SCLK, GPIO_IN); 262 gpio_pull_down(RASPBERRY4B_SCLK); 263 264 265 266 uint addr = pio_add_program(pio1, &pioasm_program); 267 268 sleep_ms(5000); 269 270 pioasm_exec( 271 pio1, 272 0, 273 addr, 274 275 276 MISO, 277 1, 278 279 280 0, 281 0, 282 283 284 0, 285 0, 286 287 288 125.0 289 ); 290 291 292 293 bitdata1 = 43690; 294 295 296 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO1); 297 298 299 while(true){ 300 INTERRUPT_RASPBERRY4B_deselect(); 301 sleep_us(5); 302 INTERRUPT_RASPBERRY4B_select(); 303 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO1); 304 sleep_ms(8000); 305 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO1); 306 307 } 308 309 return 0; 310 311} 312 313 314 315 316 317

pioアセンブリ

1.program pioasm 2.wrap_target 3 pull block 4 5 6 out pins, 1 7.wrap 8 9 10 11 12 13% c-sdk { 14 15void pioasm_exec( 16 PIO pio, 17 uint state_machine, 18 uint prog_addr, 19 20 uint outpin_base, 21 uint num_outpin, 22 23 uint inpin_base, 24 uint num_inpin, 25 26 uint sidepin_base, 27 uint num_sidepin, 28 29 float clkdiv 30) 31{ 32 省略 33} 34 35 36%} 37 38Raspberry Pi 4Bに書き込んだPythonのプログラムは以下のものです。 39

Python

1#coding: utf-8 2 3import RPi.GPIO as GPIO 4import spidev 5import time 6import datetime 7 8dummyData = [0x00,0x00] 9 10spi = spidev.SpiDev() 11spi.open(0, 0) 12 13# Settings 14spi.max_speed_hz = 10000 # 10kHz 15spi.mode = 0 # SPI mode : 0 16 17def write_csv(bitData): 18 dt_now = datetime.datetime.now() 19 with open('ADS8329.csv', 'a') as f: 20 f.write(dt_now.strftime('%Y/%m/%d %H:%M:%S') + "," + str(bitData) + "\n") 21 22class CallBack: 23 24 def __init__(self): 25 # 4番pinを入力、プルアップに設定 26 self.pin = 4 27 GPIO.setmode(GPIO.BCM) 28 GPIO.setup(self.pin, GPIO.IN, GPIO.PUD_UP) 29 30 def callback_test(self): 31 32 while(True): 33 # 立下りエッジイベント、タイムアウトイベント待ち 34 isr = GPIO.wait_for_edge(self.pin, GPIO.FALLING, timeout=5, bouncetime=1) 35 if isr is None: 36 # 5m秒間割り込みがないときに実行される 37 print("5ms秒間割り込みなし") 38 else: 39 readByteArray = spi.xfer2(dummyData) 40 bitData = ((readByteArray[0] & 0b11111111) << 8) | (readByteArray[1]) 41 write_csv(bitData) 42cb = CallBack() 43cb.callback_test() 44 45
aaabbbsss👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/06/21 04:13

回路図がわからないのであれですが、ラズパイ4の4番ピンにはちゃんと繰り返し波形がきているでしょうか
TatsuyaMorita

2022/06/21 04:30

申し訳ございません。 Raspberry Pi4BのGPIO4は、Raspberry Pi PicoのGPIO28に接続しています。 Raspberry Pi4BのGPIO11(SCLK)はRaspberry Pi PicoのGPIO27に接続しています。 Raspberry Pi4BのGPIO9(MISO)はRaspberry Pi PicoのGPIO26に接続しています。
TatsuyaMorita

2022/06/21 04:36

Raspberry Pi Picoが最初に1回GPIO28から信号を出したあと、ずっと割り込みがかかった状態になって、GPIO28から信号を出せなくなっているのではないかと思いました。
y_waiwai

2022/06/21 04:40

まずはそこの信号を確認しないと、いくらコードをいじっても無駄になりますんで、オシロスコープ持ってきてそこの波形を確認しよう
TatsuyaMorita

2022/06/21 05:10 編集

回答ありがとうございます。 オシロスコープで確認したら、やはりRaspberr Pi PicoのGPIO28からの信号は1回しか出てないようでした。
y_waiwai

2022/06/21 05:46

これで、pico側に不具合があるということがわかったわけですね
guest

回答1

0

下のソースコードのように、callback関数の中のsleep時間をsleep_us(1);とすると、GPIO26の信号の立ち上がり時間が1μsしかないので、SCLKの立ち下がりのタイミングで、信号を出すことは出来ませんが、無限ループで周期的にプログラムを動かすことは出来ました。

C言語

1#include <stdio.h> 2#include <string.h> 3#include <math.h> 4 5#include "hardware/gpio.h" 6#include "pico/stdlib.h" 7#include "hardware/pio.h" 8#include "hardware/clocks.h" 9 10#include "myapp.pio.h" 11 12 13#define INTERRUPT_RASPBERRY4B 28 14 15#define MISO 26 16 17 18#define RASPBERRY4B_SCLK 27 19 20void callback_MISO2(); 21void callback_MISO3(); 22void callback_MISO4(); 23void callback_MISO5(); 24void callback_MISO6(); 25void callback_MISO7(); 26void callback_MISO8(); 27void callback_MISO9(); 28void callback_MISO10(); 29void callback_MISO11(); 30void callback_MISO12(); 31void callback_MISO13(); 32void callback_MISO14(); 33void callback_MISO15(); 34void callback_MISO16(); 35 36static inline void INTERRUPT_RASPBERRY4B_select(){ 37 asm volatile("nop \n nop \n nop"); 38 gpio_put(INTERRUPT_RASPBERRY4B, 0); 39 asm volatile("nop \n nop \n nop"); 40} 41 42static inline void INTERRUPT_RASPBERRY4B_deselect(){ 43 asm volatile("nop \n nop \n nop"); 44 gpio_put(INTERRUPT_RASPBERRY4B, 1); 45 asm volatile("nop \n nop \n nop"); 46} 47 48uint bitdata1; 49uint bitdata2; 50 51void callback_MISO1(){ 52 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO1); 53 pio_sm_clear_fifos(pio1, 0); 54 55 bitdata2 = (bitdata1 & 0b1000000000000000)>>15; 56 57 pio_sm_put_blocking(pio1, 0, bitdata2); 58 sleep_us(1); 59 pio_sm_put_blocking(pio1, 0, 0x00000000); 60 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO2); 61} 62 63void callback_MISO2(){ 64 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO2); 65 pio_sm_clear_fifos(pio1, 0); 66 67 bitdata2 = (bitdata1 & 0b0100000000000000)>>14; 68 69 pio_sm_put_blocking(pio1, 0, bitdata2); 70 sleep_us(1); 71 pio_sm_put_blocking(pio1, 0, 0x00000000); 72 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO3); 73} 74 75void callback_MISO3(){ 76 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO3); 77 pio_sm_clear_fifos(pio1, 0); 78 79 bitdata2 = (bitdata1 & 0b0010000000000000)>>13; 80 81 pio_sm_put_blocking(pio1, 0, bitdata2); 82 sleep_us(1); 83 pio_sm_put_blocking(pio1, 0, 0x00000000); 84 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO4); 85} 86 87void callback_MISO4(){ 88 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO4); 89 pio_sm_clear_fifos(pio1, 0); 90 91 bitdata2 = (bitdata1 & 0b0001000000000000)>>12; 92 93 pio_sm_put_blocking(pio1, 0, bitdata2); 94 sleep_us(1); 95 pio_sm_put_blocking(pio1, 0, 0x00000000); 96 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO5); 97} 98 99void callback_MISO5(){ 100 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO5); 101 pio_sm_clear_fifos(pio1, 0); 102 103 bitdata2 = (bitdata1 & 0b0000100000000000)>>11; 104 105 pio_sm_put_blocking(pio1, 0, bitdata2); 106 sleep_us(1); 107 pio_sm_put_blocking(pio1, 0, 0x00000000); 108 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO6); 109} 110 111void callback_MISO6(){ 112 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO6); 113 pio_sm_clear_fifos(pio1, 0); 114 115 bitdata2 = (bitdata1 & 0b0000010000000000)>>10; 116 117 pio_sm_put_blocking(pio1, 0, bitdata2); 118 sleep_us(1); 119 pio_sm_put_blocking(pio1, 0, 0x00000000); 120 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO7); 121} 122 123void callback_MISO7(){ 124 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO7); 125 pio_sm_clear_fifos(pio1, 0); 126 127 bitdata2 = (bitdata1 & 0b0000001000000000)>>9; 128 129 130 pio_sm_put_blocking(pio1, 0, bitdata2); 131 sleep_us(1); 132 pio_sm_put_blocking(pio1, 0, 0x00000000); 133 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO8); 134} 135 136void callback_MISO8(){ 137 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO8); 138 pio_sm_clear_fifos(pio1, 0); 139 140 bitdata2 = (bitdata1 & 0b0000000100000000)>>8; 141 142 pio_sm_put_blocking(pio1, 0, bitdata2); 143 sleep_us(1); 144 pio_sm_put_blocking(pio1, 0, 0x00000000); 145 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO9); 146} 147 148void callback_MISO9(){ 149 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO9); 150 pio_sm_clear_fifos(pio1, 0); 151 152 bitdata2 = (bitdata1 & 0b0000000010000000)>>7; 153 154 pio_sm_put_blocking(pio1, 0, bitdata2); 155 sleep_us(1); 156 pio_sm_put_blocking(pio1, 0, 0x00000000); 157 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO10); 158} 159 160void callback_MISO10(){ 161 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO10); 162 pio_sm_clear_fifos(pio1, 0); 163 164 bitdata2 = (bitdata1 & 0b0000000001000000)>>6; 165 166 pio_sm_put_blocking(pio1, 0, bitdata2); 167 sleep_us(1); 168 pio_sm_put_blocking(pio1, 0, 0x00000000); 169 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO11); 170} 171 172void callback_MISO11(){ 173 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO11); 174 pio_sm_clear_fifos(pio1, 0); 175 176 bitdata2 = (bitdata1 & 0b0000000000100000)>>5; 177 178 pio_sm_put_blocking(pio1, 0, bitdata2); 179 sleep_us(1); 180 pio_sm_put_blocking(pio1, 0, 0x00000000); 181 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO12); 182} 183 184void callback_MISO12(){ 185 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO12); 186 pio_sm_clear_fifos(pio1, 0); 187 188 bitdata2 = (bitdata1 & 0b0000000000010000)>>4; 189 190 pio_sm_put_blocking(pio1, 0, bitdata2); 191 sleep_us(1); 192 pio_sm_put_blocking(pio1, 0, 0x00000000); 193 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO13); 194} 195 196void callback_MISO13(){ 197 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO13); 198 pio_sm_clear_fifos(pio1, 0); 199 200 bitdata2 = (bitdata1 & 0b0000000000001000)>>3; 201 202 pio_sm_put_blocking(pio1, 0, bitdata2); 203 sleep_us(1); 204 pio_sm_put_blocking(pio1, 0, 0x00000000); 205 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO14); 206} 207 208void callback_MISO14(){ 209 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO14); 210 pio_sm_clear_fifos(pio1, 0); 211 212 bitdata2 = (bitdata1 & 0b0000000000000100)>>2; 213 214 pio_sm_put_blocking(pio1, 0, bitdata2); 215 sleep_us(1); 216 pio_sm_put_blocking(pio1, 0, 0x00000000); 217 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO15); 218} 219 220void callback_MISO15(){ 221 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO15); 222 pio_sm_clear_fifos(pio1, 0); 223 224 bitdata2 = (bitdata1 & 0b0100000000000010)>>1; 225 226 pio_sm_put_blocking(pio1, 0, bitdata2); 227 sleep_us(1); 228 pio_sm_put_blocking(pio1, 0, 0x00000000); 229 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO16); 230} 231 232 233void callback_MISO16(){ 234 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, false, callback_MISO16); 235 pio_sm_clear_fifos(pio1, 0); 236 237 bitdata2 = bitdata1 & 0b0000000000000001; 238 239 pio_sm_put_blocking(pio1, 0, bitdata2); 240 sleep_us(1); 241 pio_sm_put_blocking(pio1, 0, 0x00000000); 242 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO1); 243 244} 245 246 247 248 249 250 251 252int main() 253{ 254 stdio_init_all(); 255 256 sleep_ms(3000); 257 258 gpio_init(INTERRUPT_RASPBERRY4B); 259 gpio_set_dir(INTERRUPT_RASPBERRY4B, GPIO_OUT); 260 261 gpio_init(RASPBERRY4B_SCLK); 262 gpio_set_dir(RASPBERRY4B_SCLK, GPIO_IN); 263 gpio_pull_down(RASPBERRY4B_SCLK); 264 265 266 267 uint addr = pio_add_program(pio1, &pioasm_program); 268 269 sleep_ms(5000); 270 271 pioasm_exec( 272 pio1, 273 0, 274 addr, 275 276 277 MISO, 278 1, 279 280 281 0, 282 0, 283 284 285 0, 286 0, 287 288 289 125.0 290 ); 291 292 293 294 bitdata1 = 43690; 295 296 297 298 gpio_set_irq_enabled_with_callback(RASPBERRY4B_SCLK, 0x8u, true, callback_MISO1); 299 300 301 302 303 304 while(true){ 305 INTERRUPT_RASPBERRY4B_deselect(); 306 sleep_us(8); 307 INTERRUPT_RASPBERRY4B_select(); 308 sleep_ms(8000); 309 310 311 312 } 313 314 return 0; 315 316}

投稿2022/06/21 07:37

TatsuyaMorita

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問