Arduino 328 SPI to LTC2315-12 ADC HELP!

Hi, Im trying to use a Linear LTC2315-12 5msps ADC in a project with an ATMEGA328P as UNO.

I am trying to get the SPI to work fast enough to at least sample 10 readings in a 30uS window. I was told by Linear tech that i should be able to get 18 samples in that time frame if i could get the SPI bus to 10mhz. I have a 16mhz crystal so im not trying to reach 10mhz SPI at this moment but if i could truly get 8mhz it might work for me.

when i take a single reading it takes 56uS and according to Linear tech, i should be able to get a reading in 2uS.

Im at a loss… Am i missing something in the SPI to make it faster? Will the Arduino UNO bootloader allow me to reach 8mhz SPI?

Here is my code just in case someone can help…

#include <Arduino.h>
#include <stdint.h>
#include "Linduino.h"
//#include "LT_SPI.h"
//#include "UserInterface.h"
//#include "LT_I2C.h"
//#include "QuikEval_EEPROM.h"
#include "LTC2315.h"
#include <SPI.h>
#include <Wire.h>

// Function Declaration
void menu_1_read_input();
void takeReading();
void ShowReadings();

// Global variables
static uint8_t LTC2315_bits = 12;                   //!< Default set for 12 bits
static uint8_t LTC2315_shift = 1;
float LTC2315_vref = 4.096;
static uint8_t LTC2315_JP3 = 1;                     //!< Default set for 4.096V (Vdd = 5V)
float channel= 0;
float adc_voltage;  
 uint16_t adc_code;                           // The LTC2315 code
 uint16_t display_code;
int x = 1;
int TRUE = 1;
SPISettings settingsA(20000000, MSBFIRST, SPI_MODE0); 

void setup()
{
 uint32_t adc_code;
 // quikeval_I2C_init();           // Configure the EEPROM I2C port for 100kHz
  //quikeval_SPI_init();           // Configure the spi port for 4MHz SCK
 // quikeval_SPI_connect();        // Connect SPI to main data port
  Serial.begin(115200);          // Initialize the serial port to the PC
     LTC2315_JP3 = 1;
     LTC2315_vref = 4.096;
     LTC2315_bits = 12;
    // SPI.setClockDivider(2);
     SPI.begin(); 
}
void loop()
{
 SPI.beginTransaction(settingsA);
  takeReading();
   int time1 = micros();
  takeReading();
   int time2 = micros();

  SPI.endTransaction();
  ShowReadings();
  
  int tTotal = time2 - time1;
  
  Serial.println();
  Serial.print("ADC Read Execute Time: ");
  Serial.print(tTotal);
  Serial.println("us");
  
  //stop here
  while(TRUE){
    //do nothing
  }
 //delay(100);
}

void ShowReadings(){
// for (int i=0;i<=5; i++){
    Serial.println( channel);
 // }
}

void takeReading(){ 
 //for (int i=0;i<=5; i++){
    LTC2315_read(LTC2315_CS, &adc_code);
    adc_voltage = LTC2315_code_to_voltage(adc_code, LTC2315_shift, LTC2315_vref);
    channel = adc_voltage;
   //}
}

What is the objective? Arduino has 2k memory, sampling as fast as 2usec error "memory overflow" is going to happen in 2 milliseconds. Tell more what is you trying to achieve.

I want to use this ADC in a metal detector project. The induced current that i want to measure lasts only around 30uS so i want to sample as many times as i can in that time frame. Eventually i will move to a faster processor like the Teensy 3.5 or 3.6 but for now i would like to get a few samples across that time frame using the ATMEGA328P.

I believe the lag is caused by the libraries, Can anyone help with a direct SPI communication in as little code as possible? maybe where i dont need a library but just a function to call?

No, you don't need a library, to read fast use direct registers access.
Start from here:

AtMega328 could run SPI at 8 MHz, 1 byte in usec, 2 (12-bits adc) in 2 usec or 500 ksps max sampling rate.