Truly Dumb question re structures (TWI) in Arduino

I have hit a dead stop on a project - I think if I can get over this I will be OK but I have a conceptional problem.

The project is to try to convert a library to be a all-singing all dancing replacement I2c library for the Due.

I have the following sketch which is magnificent in it's simplicity.

From looking in libraries etc it appears that Wire points to TWI1 and Wire1 points to TWI0 (Reversal).

All I am attempting to do is check the Control register and the Internal address register before I have done anything.

Then I issue a wire.begin(42) - a 'random' number, then check to see the contents of the control register (The enable bit at least should be set) and the internal address.

What happens is that the data is all zero before and after,

I think I have done something foolish when addressing the TWI structures so need a good kicking.

I did try with TWI0 instead of TWI1 but same result!

Stan

#include "Stdint.h"
#include <Wire.h>

//typedef struct {
//  WoReg TWI_CR;        /**< \brief (Twi Offset: 0x00) Control Register */
//  RwReg TWI_MMR;       /**< \brief (Twi Offset: 0x04) Master Mode Register */
//  RwReg TWI_SMR;       /**< \brief (Twi Offset: 0x08) Slave Mode Register */
//  RwReg TWI_IADR;      /**< \brief (Twi Offset: 0x0C) Internal Address Register */
//  RwReg TWI_CWGR;      /**< \brief (Twi Offset: 0x10) Clock Waveform Generator Register */
//  RoReg Reserved1[3];
//  RoReg TWI_SR;        /**< \brief (Twi Offset: 0x20) Status Register */
//  WoReg TWI_IER;       /**< \brief (Twi Offset: 0x24) Interrupt Enable Register */
//  WoReg TWI_IDR;       /**< \brief (Twi Offset: 0x28) Interrupt Disable Register */
//  RoReg TWI_IMR;       /**< \brief (Twi Offset: 0x2C) Interrupt Mask Register */
//  RoReg TWI_RHR;       /**< \brief (Twi Offset: 0x30) Receive Holding Register */
//  WoReg TWI_THR;       /**< \brief (Twi Offset: 0x34) Transmit Holding Register */
//  RoReg Reserved2[50];
//  RwReg TWI_RPR;       /**< \brief (Twi Offset: 0x100) Receive Pointer Register */
//  RwReg TWI_RCR;       /**< \brief (Twi Offset: 0x104) Receive Counter Register */
//  RwReg TWI_TPR;       /**< \brief (Twi Offset: 0x108) Transmit Pointer Register */
//  RwReg TWI_TCR;       /**< \brief (Twi Offset: 0x10C) Transmit Counter Register */
//  RwReg TWI_RNPR;      /**< \brief (Twi Offset: 0x110) Receive Next Pointer Register */
//  RwReg TWI_RNCR;      /**< \brief (Twi Offset: 0x114) Receive Next Counter Register */
//  RwReg TWI_TNPR;      /**< \brief (Twi Offset: 0x118) Transmit Next Pointer Register */
//  RwReg TWI_TNCR;      /**< \brief (Twi Offset: 0x11C) Transmit Next Counter Register */
//  WoReg TWI_PTCR;      /**< \brief (Twi Offset: 0x120) Transfer Control Register */
//  RoReg TWI_PTSR;      /**< \brief (Twi Offset: 0x124) Transfer Status Register */
//} Twi;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Starting");
delay(5000);


int CR;
CR=TWI1->TWI_CR;

Serial.println(CR,HEX);
CR=TWI1->TWI_IADR;
Serial.println(CR,HEX);

Wire.begin(42);
Serial.println("Wire Begun");

CR=TWI1->TWI_CR;

Serial.println(CR,HEX);
CR=TWI1->TWI_IADR;
Serial.println(CR,HEX);

}

void loop() {
  // put your main code here, to run repeatedly:


}

I think I have worked out the issue;

The following code shows the Wire Addr as 2A - which converts to 42!

#include "Stdint.h"
#include <Wire.h>

//typedef struct {
//  WoReg TWI_CR;        /**< \brief (Twi Offset: 0x00) Control Register */
//  RwReg TWI_MMR;       /**< \brief (Twi Offset: 0x04) Master Mode Register */
//  RwReg TWI_SMR;       /**< \brief (Twi Offset: 0x08) Slave Mode Register */
//  RwReg TWI_IADR;      /**< \brief (Twi Offset: 0x0C) Internal Address Register */
//  RwReg TWI_CWGR;      /**< \brief (Twi Offset: 0x10) Clock Waveform Generator Register */
//  RoReg Reserved1[3];
//  RoReg TWI_SR;        /**< \brief (Twi Offset: 0x20) Status Register */
//  WoReg TWI_IER;       /**< \brief (Twi Offset: 0x24) Interrupt Enable Register */
//  WoReg TWI_IDR;       /**< \brief (Twi Offset: 0x28) Interrupt Disable Register */
//  RoReg TWI_IMR;       /**< \brief (Twi Offset: 0x2C) Interrupt Mask Register */
//  RoReg TWI_RHR;       /**< \brief (Twi Offset: 0x30) Receive Holding Register */
//  WoReg TWI_THR;       /**< \brief (Twi Offset: 0x34) Transmit Holding Register */
//  RoReg Reserved2[50];
//  RwReg TWI_RPR;       /**< \brief (Twi Offset: 0x100) Receive Pointer Register */
//  RwReg TWI_RCR;       /**< \brief (Twi Offset: 0x104) Receive Counter Register */
//  RwReg TWI_TPR;       /**< \brief (Twi Offset: 0x108) Transmit Pointer Register */
//  RwReg TWI_TCR;       /**< \brief (Twi Offset: 0x10C) Transmit Counter Register */
//  RwReg TWI_RNPR;      /**< \brief (Twi Offset: 0x110) Receive Next Pointer Register */
//  RwReg TWI_RNCR;      /**< \brief (Twi Offset: 0x114) Receive Next Counter Register */
//  RwReg TWI_TNPR;      /**< \brief (Twi Offset: 0x118) Transmit Next Pointer Register */
//  RwReg TWI_TNCR;      /**< \brief (Twi Offset: 0x11C) Transmit Next Counter Register */
//  WoReg TWI_PTCR;      /**< \brief (Twi Offset: 0x120) Transfer Control Register */
//  RoReg TWI_PTSR;      /**< \brief (Twi Offset: 0x124) Transfer Status Register */
//} Twi;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Starting");
delay(5000);


uint32_t CR;
CR=Get_Control_Register(WIRE_INTERFACE);
Serial.print("Wire Interface CR ");
Serial.println(CR,HEX);
CR=Get_Control_Register(WIRE1_INTERFACE);
Serial.print("Wire1 Interface CR ");
Serial.println(CR,HEX);

CR=Get_Iaddress(WIRE_INTERFACE);
Serial.print("Wire Iaddr ");
Serial.println(CR,HEX);

CR=Get_Iaddress(WIRE1_INTERFACE);
Serial.print("Wire1 Iaddr ");
Serial.println(CR,HEX);

CR=Get_Status(WIRE_INTERFACE);
Serial.print("Wire Status ");
Serial.println(CR,HEX);

CR=Get_Status(WIRE1_INTERFACE);
Serial.print("Wire1 Status ");
Serial.println(CR,HEX);

Wire.begin(42);
Serial.println("Wire Begun");

CR=Get_Control_Register(WIRE_INTERFACE);
Serial.print("Wire Interface CR ");
Serial.println(CR,HEX);
CR=Get_Control_Register(WIRE1_INTERFACE);
Serial.print("Wire1 Interface CR ");
Serial.println(CR,HEX);

CR=Get_Iaddress(WIRE_INTERFACE);
Serial.print("Wire Iaddr ");
Serial.println(CR,HEX);

CR=Get_Iaddress(WIRE1_INTERFACE);
Serial.print("Wire1 Iaddr ");
Serial.println(CR,HEX);

CR=Get_Status(WIRE_INTERFACE);
Serial.print("Wire Status ");
Serial.println(CR,HEX);

CR=Get_Status(WIRE1_INTERFACE);
Serial.print("Wire1 Status ");
Serial.println(CR,HEX);
}

void loop() {
  // put your main code here, to run repeatedly:


}
uint32_t Get_Control_Register(Twi *_pTwi){
  return _pTwi->TWI_CR;
}
uint32_t Get_Iaddress(Twi *_pTwi){
  return _pTwi->TWI_SMR;
}
uint32_t Get_Status(Twi *_pTwi){
  return _pTwi->TWI_SR;
}

And here is the truly dumb bit!

The reason I did not get anything from the control register is that it is write only (Doh).

Stan