#include "project.h" #define SCLK 17 #define MOSI 18 #define NCS 19 #define MISO 20 #define READ 0x3 #define FAST_READ 0xb static inline void d(void) { nrf_delay_us(1); } void gt_init (void) { NRF_GPIO->PIN_CNF[SCLK] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); NRF_GPIO->PIN_CNF[MOSI] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); NRF_GPIO->PIN_CNF[NCS] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); NRF_GPIO->PIN_CNF[MISO] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Pulldown << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos); NRF_GPIO->DIRSET = (1 << MOSI) | (1 << NCS) | (1<DIRCLR = (1 << MISO); NRF_GPIO->OUTSET = (1 << NCS) | (1<OUTCLR = (1 << SCLK); d(); NRF_GPIO->OUTCLR = (1 << NCS); NRF_GPIO->OUTSET = (1 << NCS); d(); a |= READ << 24; a=0x3000000; a+=768+80; for (c=0x80000000;c;c>>=1) { if (c&a) NRF_GPIO->OUTSET = (1 << MOSI); else NRF_GPIO->OUTCLR = (1 << MOSI); d(); NRF_GPIO->OUTSET = (1 << SCLK); d(); NRF_GPIO->OUTCLR = (1 << SCLK); d(); } while (len--) { v=0; for (c=0x80;c;c>>=1) { if (NRF_GPIO->IN & (1<OUTSET = (1 << SCLK); d(); NRF_GPIO->OUTCLR = (1 << SCLK); d(); } *(buf++)=v; } d(); NRF_GPIO->OUTSET = (1 << NCS); d(); }