#include "project.h" // P0.20 => ginatop pin 8 MISO // P0.19 => ginatop pin 7 CS // P0.18 => ginatop pin 4 SCLK // P0.17 => ginatop pin 3 MOSI #define MOSI 17 #define SCLK 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; 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(); } void gt_read_8x8(uint32_t c,uint8_t *d,size_t l) { if (c<0x20) c=0x20; if (c>0x7e) c=0x20; c-=0x20; c*=8; c+=768; gt_read(c,d,l); }