Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // スレーブモード送受信
- // Master:MCP2221 I2C/UART Converter
- void twi_slave_func(void)
- {
- uint16_t twi_status = *pTWI_INT_STAT; // 割り込みステータス
- uint16_t from_m_data = 0; // マスターより受信データ
- // スレーブモードステータス
- if((twi_status & SINIT) != 0)
- {
- // スレーブモード転送中.
- *pTWI_INT_STAT = SINIT;
- }
- // スレーブモード受信
- if((twi_status & RCVSERV) != 0)
- {
- // 2バイト受信
- if((*pTWI_FIFO_STAT & RCVSTAT) == RCV_FULL)
- {
- from_m_data = *pTWI_RCV_DATA16;
- swap_ld_bit(from_m_data);
- }
- // 1バイト受信
- else if((*pTWI_FIFO_STAT & RCVSTAT) == RCV_HALF)
- {
- from_m_data = *pTWI_RCV_DATA8;
- rcv_data = from_m_data;
- }
- // フラッシュメモリに書き込み
- spi_flash_write_func();
- // 受信FIFOバッファクリア
- *pTWI_FIFO_CTL = RCVFLUSH;
- ssync();
- *pTWI_FIFO_CTL = 0;
- ssync();
- *pTWI_INT_STAT = RCVSERV;
- }
- // スレーブモード送信
- else if((twi_status & XMTSERV) != 0)
- // XMTSERV = 0x0040 0100 0000
- {
- *pTWI_XMT_DATA16 = c_avg;
- *pTWI_INT_STAT = XMTSERV;
- }
- // エラー
- else if((twi_status & SERR) != 0u)
- {
- // 送受信FIFOバッファクリア
- *pTWI_FIFO_CTL = XMTFLUSH | RCVFLUSH;
- ssync();
- *pTWI_FIFO_CTL = 0;
- ssync();
- *pTWI_INT_STAT = SERR;
- }
- // オーバーフロー
- else if((twi_status & SOVF) != 0u)
- {
- // 受信FIFOバッファクリア
- *pTWI_FIFO_CTL = RCVFLUSH;
- ssync();
- *pTWI_FIFO_CTL = 0;
- ssync();
- *pTWI_INT_STAT = SOVF;
- }
- // 転送完了
- else if((twi_status & SCOMP) != 0u)
- {
- if(twi_status & RCV_HALF)
- {
- from_m_data = *pTWI_RCV_DATA16;
- *pTWI_FIFO_CTL = RCVFLUSH;
- ssync();
- *pTWI_FIFO_CTL = 0;
- ssync();
- *pTWI_FIFO_CTL = 0;
- }
- // 送信FIFOバッファクリア
- *pTWI_FIFO_CTL = XMTFLUSH;
- ssync();
- *pTWI_FIFO_CTL = 0;
- ssync();
- *pTWI_INT_STAT = SCOMP;
- }
- ssync();
- }
Advertisement
Add Comment
Please, Sign In to add comment