FeliCa Link library sample

Dependencies:   RCS730 SB1602E mbed

FeliCa Link Library using sample (NUCLEO-F411RE).

  • SCL/D15 ... SCL
  • SDA/D14 ... SDA
  • D8(PA_9) ... IRQ
  • D7(PA_8) ... RFDET (LED blink)

SB1602E is used for debugging. Not necessary.

Committer:
hiro99ma
Date:
Sun Mar 29 06:13:12 2015 +0000
Revision:
0:6efd0ff1fcbe
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hiro99ma 0:6efd0ff1fcbe 1 #include "RCS730.h"
hiro99ma 0:6efd0ff1fcbe 2
hiro99ma 0:6efd0ff1fcbe 3
hiro99ma 0:6efd0ff1fcbe 4 namespace {
hiro99ma 0:6efd0ff1fcbe 5 const int I2C_SLV_ADDR = 0x80; //Default Slave Address(8bit)
hiro99ma 0:6efd0ff1fcbe 6 const int RETRY_NUM = 5; //max I2C Retry count
hiro99ma 0:6efd0ff1fcbe 7
hiro99ma 0:6efd0ff1fcbe 8
hiro99ma 0:6efd0ff1fcbe 9 inline int set_tag_rf_send_enable(RCS730 *pRcs)
hiro99ma 0:6efd0ff1fcbe 10 {
hiro99ma 0:6efd0ff1fcbe 11 uint32_t val = 0x00000001;
hiro99ma 0:6efd0ff1fcbe 12 return pRcs->pageWrite(RCS730::REG_TAG_TX_CTRL, reinterpret_cast<const uint8_t*>(&val), sizeof(val));
hiro99ma 0:6efd0ff1fcbe 13 }
hiro99ma 0:6efd0ff1fcbe 14
hiro99ma 0:6efd0ff1fcbe 15 int read_rf_buf(RCS730 *pRcs, uint8_t *pData)
hiro99ma 0:6efd0ff1fcbe 16 {
hiro99ma 0:6efd0ff1fcbe 17 const int LEN_FIRST = 16;
hiro99ma 0:6efd0ff1fcbe 18 int len = 0;
hiro99ma 0:6efd0ff1fcbe 19 int ret;
hiro99ma 0:6efd0ff1fcbe 20
hiro99ma 0:6efd0ff1fcbe 21 //read from LEN
hiro99ma 0:6efd0ff1fcbe 22 ret = pRcs->sequentialRead(RCS730::BUF_RF_COMM, pData, LEN_FIRST);
hiro99ma 0:6efd0ff1fcbe 23 if (ret == 0) {
hiro99ma 0:6efd0ff1fcbe 24 len = pData[0];
hiro99ma 0:6efd0ff1fcbe 25 }
hiro99ma 0:6efd0ff1fcbe 26 if ((ret == 0) && (pData[0] > LEN_FIRST)) {
hiro99ma 0:6efd0ff1fcbe 27 ret = pRcs->sequentialRead(RCS730::BUF_RF_COMM + LEN_FIRST, pData + LEN_FIRST, pData[0] - LEN_FIRST);
hiro99ma 0:6efd0ff1fcbe 28 if (ret != 0) {
hiro99ma 0:6efd0ff1fcbe 29 len = 0;
hiro99ma 0:6efd0ff1fcbe 30 }
hiro99ma 0:6efd0ff1fcbe 31 }
hiro99ma 0:6efd0ff1fcbe 32
hiro99ma 0:6efd0ff1fcbe 33 return len;
hiro99ma 0:6efd0ff1fcbe 34 }
hiro99ma 0:6efd0ff1fcbe 35 }
hiro99ma 0:6efd0ff1fcbe 36
hiro99ma 0:6efd0ff1fcbe 37
hiro99ma 0:6efd0ff1fcbe 38 RCS730::RCS730(I2C &I2c)
hiro99ma 0:6efd0ff1fcbe 39 : _i2c(I2c), _slvAddr(I2C_SLV_ADDR)
hiro99ma 0:6efd0ff1fcbe 40 {
hiro99ma 0:6efd0ff1fcbe 41 _cbTable.pUserData = 0;
hiro99ma 0:6efd0ff1fcbe 42 _cbTable.pCbRxHTRDone = 0;
hiro99ma 0:6efd0ff1fcbe 43 _cbTable.pCbRxHTWDone = 0;
hiro99ma 0:6efd0ff1fcbe 44 }
hiro99ma 0:6efd0ff1fcbe 45
hiro99ma 0:6efd0ff1fcbe 46 RCS730::~RCS730()
hiro99ma 0:6efd0ff1fcbe 47 {
hiro99ma 0:6efd0ff1fcbe 48 }
hiro99ma 0:6efd0ff1fcbe 49
hiro99ma 0:6efd0ff1fcbe 50
hiro99ma 0:6efd0ff1fcbe 51 void RCS730::setCallbackTable(const callbacktable_t *pInitTable)
hiro99ma 0:6efd0ff1fcbe 52 {
hiro99ma 0:6efd0ff1fcbe 53 _cbTable = *pInitTable;
hiro99ma 0:6efd0ff1fcbe 54 }
hiro99ma 0:6efd0ff1fcbe 55
hiro99ma 0:6efd0ff1fcbe 56
hiro99ma 0:6efd0ff1fcbe 57 int RCS730::byteWrite(uint16_t MemAddr, uint8_t Data)
hiro99ma 0:6efd0ff1fcbe 58 {
hiro99ma 0:6efd0ff1fcbe 59 int ret;
hiro99ma 0:6efd0ff1fcbe 60 int retry = RETRY_NUM;
hiro99ma 0:6efd0ff1fcbe 61 char buf[3];
hiro99ma 0:6efd0ff1fcbe 62
hiro99ma 0:6efd0ff1fcbe 63 buf[0] = (char)(MemAddr >> 8);
hiro99ma 0:6efd0ff1fcbe 64 buf[1] = (char)(MemAddr & 0xff);
hiro99ma 0:6efd0ff1fcbe 65 buf[2] = (char)Data;
hiro99ma 0:6efd0ff1fcbe 66
hiro99ma 0:6efd0ff1fcbe 67 do {
hiro99ma 0:6efd0ff1fcbe 68 ret = _i2c.write(_slvAddr, buf, (int)sizeof(buf));
hiro99ma 0:6efd0ff1fcbe 69 } while ((ret != 0) && (retry--));
hiro99ma 0:6efd0ff1fcbe 70
hiro99ma 0:6efd0ff1fcbe 71 return ret;
hiro99ma 0:6efd0ff1fcbe 72 }
hiro99ma 0:6efd0ff1fcbe 73
hiro99ma 0:6efd0ff1fcbe 74
hiro99ma 0:6efd0ff1fcbe 75 int RCS730::pageWrite(uint16_t MemAddr, const uint8_t *pData, int Length)
hiro99ma 0:6efd0ff1fcbe 76 {
hiro99ma 0:6efd0ff1fcbe 77 int ret;
hiro99ma 0:6efd0ff1fcbe 78 int retry = RETRY_NUM;
hiro99ma 0:6efd0ff1fcbe 79 char buf[2];
hiro99ma 0:6efd0ff1fcbe 80
hiro99ma 0:6efd0ff1fcbe 81 buf[0] = (char)(MemAddr >> 8);
hiro99ma 0:6efd0ff1fcbe 82 buf[1] = (char)(MemAddr & 0xff);
hiro99ma 0:6efd0ff1fcbe 83
hiro99ma 0:6efd0ff1fcbe 84 do {
hiro99ma 0:6efd0ff1fcbe 85 ret = _i2c.write(_slvAddr, buf, (int)sizeof(buf), true);
hiro99ma 0:6efd0ff1fcbe 86 } while ((ret != 0) && (retry--));
hiro99ma 0:6efd0ff1fcbe 87 if (ret == 0) {
hiro99ma 0:6efd0ff1fcbe 88 for (int i = 0; i < Length; i++) {
hiro99ma 0:6efd0ff1fcbe 89 ret = !_i2c.write(pData[i]); //I2C::write(b) return 1 if success.
hiro99ma 0:6efd0ff1fcbe 90 if (ret != 0) {
hiro99ma 0:6efd0ff1fcbe 91 break;
hiro99ma 0:6efd0ff1fcbe 92 }
hiro99ma 0:6efd0ff1fcbe 93 }
hiro99ma 0:6efd0ff1fcbe 94 }
hiro99ma 0:6efd0ff1fcbe 95 _i2c.stop();
hiro99ma 0:6efd0ff1fcbe 96
hiro99ma 0:6efd0ff1fcbe 97 return ret;
hiro99ma 0:6efd0ff1fcbe 98 }
hiro99ma 0:6efd0ff1fcbe 99
hiro99ma 0:6efd0ff1fcbe 100
hiro99ma 0:6efd0ff1fcbe 101 int RCS730::randomRead(uint16_t MemAddr, uint8_t *pData)
hiro99ma 0:6efd0ff1fcbe 102 {
hiro99ma 0:6efd0ff1fcbe 103 return sequentialRead(MemAddr, pData, 1);
hiro99ma 0:6efd0ff1fcbe 104 }
hiro99ma 0:6efd0ff1fcbe 105
hiro99ma 0:6efd0ff1fcbe 106
hiro99ma 0:6efd0ff1fcbe 107 int RCS730::sequentialRead(uint16_t MemAddr, uint8_t *pData, int Length)
hiro99ma 0:6efd0ff1fcbe 108 {
hiro99ma 0:6efd0ff1fcbe 109 int ret;
hiro99ma 0:6efd0ff1fcbe 110 int retry = RETRY_NUM;
hiro99ma 0:6efd0ff1fcbe 111 char buf[2];
hiro99ma 0:6efd0ff1fcbe 112
hiro99ma 0:6efd0ff1fcbe 113 buf[0] = (char)(MemAddr >> 8);
hiro99ma 0:6efd0ff1fcbe 114 buf[1] = (char)(MemAddr & 0xff);
hiro99ma 0:6efd0ff1fcbe 115
hiro99ma 0:6efd0ff1fcbe 116 do {
hiro99ma 0:6efd0ff1fcbe 117 ret = _i2c.write(_slvAddr, buf, (int)sizeof(buf), true);
hiro99ma 0:6efd0ff1fcbe 118 } while ((ret != 0) && (retry--));
hiro99ma 0:6efd0ff1fcbe 119 if (ret == 0) {
hiro99ma 0:6efd0ff1fcbe 120 ret = _i2c.read(_slvAddr | 1, reinterpret_cast<char*>(pData), Length);
hiro99ma 0:6efd0ff1fcbe 121 }
hiro99ma 0:6efd0ff1fcbe 122
hiro99ma 0:6efd0ff1fcbe 123 return ret;
hiro99ma 0:6efd0ff1fcbe 124 }
hiro99ma 0:6efd0ff1fcbe 125
hiro99ma 0:6efd0ff1fcbe 126
hiro99ma 0:6efd0ff1fcbe 127 int RCS730::currentAddrRead(uint8_t *pData)
hiro99ma 0:6efd0ff1fcbe 128 {
hiro99ma 0:6efd0ff1fcbe 129 int ret;
hiro99ma 0:6efd0ff1fcbe 130 int retry = RETRY_NUM;
hiro99ma 0:6efd0ff1fcbe 131
hiro99ma 0:6efd0ff1fcbe 132 do {
hiro99ma 0:6efd0ff1fcbe 133 ret = _i2c.read((int)(_slvAddr | 1), reinterpret_cast<char*>(pData), 1);
hiro99ma 0:6efd0ff1fcbe 134 } while ((ret != 0) && (retry--));
hiro99ma 0:6efd0ff1fcbe 135
hiro99ma 0:6efd0ff1fcbe 136 return ret;
hiro99ma 0:6efd0ff1fcbe 137 }
hiro99ma 0:6efd0ff1fcbe 138
hiro99ma 0:6efd0ff1fcbe 139
hiro99ma 0:6efd0ff1fcbe 140 inline int RCS730::readRegister(uint16_t Reg, uint32_t* pData)
hiro99ma 0:6efd0ff1fcbe 141 {
hiro99ma 0:6efd0ff1fcbe 142 return sequentialRead(Reg, reinterpret_cast<uint8_t*>(pData), sizeof(uint32_t));
hiro99ma 0:6efd0ff1fcbe 143 }
hiro99ma 0:6efd0ff1fcbe 144
hiro99ma 0:6efd0ff1fcbe 145
hiro99ma 0:6efd0ff1fcbe 146 inline int RCS730::writeRegisterForce(uint16_t Reg, uint32_t Data)
hiro99ma 0:6efd0ff1fcbe 147 {
hiro99ma 0:6efd0ff1fcbe 148 return pageWrite(Reg, reinterpret_cast<const uint8_t*>(&Data), sizeof(Data));
hiro99ma 0:6efd0ff1fcbe 149 }
hiro99ma 0:6efd0ff1fcbe 150
hiro99ma 0:6efd0ff1fcbe 151
hiro99ma 0:6efd0ff1fcbe 152 int RCS730::writeRegister(uint16_t Reg, uint32_t Data, uint32_t Mask/*=0xffffffff*/)
hiro99ma 0:6efd0ff1fcbe 153 {
hiro99ma 0:6efd0ff1fcbe 154 int ret;
hiro99ma 0:6efd0ff1fcbe 155 uint32_t cur; //current register value
hiro99ma 0:6efd0ff1fcbe 156
hiro99ma 0:6efd0ff1fcbe 157 ret = readRegister(Reg, &cur);
hiro99ma 0:6efd0ff1fcbe 158 if (ret == 0) {
hiro99ma 0:6efd0ff1fcbe 159 if ((cur & Mask) != Data) {
hiro99ma 0:6efd0ff1fcbe 160 // change value
hiro99ma 0:6efd0ff1fcbe 161 Data |= cur & ~Mask;
hiro99ma 0:6efd0ff1fcbe 162 ret = writeRegisterForce(Reg, Data);
hiro99ma 0:6efd0ff1fcbe 163 }
hiro99ma 0:6efd0ff1fcbe 164 }
hiro99ma 0:6efd0ff1fcbe 165
hiro99ma 0:6efd0ff1fcbe 166 return ret;
hiro99ma 0:6efd0ff1fcbe 167 }
hiro99ma 0:6efd0ff1fcbe 168
hiro99ma 0:6efd0ff1fcbe 169
hiro99ma 0:6efd0ff1fcbe 170 int RCS730::setRegOpMode(OpMode Mode)
hiro99ma 0:6efd0ff1fcbe 171 {
hiro99ma 0:6efd0ff1fcbe 172 return writeRegister(REG_OPMODE, static_cast<uint32_t>(Mode));
hiro99ma 0:6efd0ff1fcbe 173 }
hiro99ma 0:6efd0ff1fcbe 174
hiro99ma 0:6efd0ff1fcbe 175
hiro99ma 0:6efd0ff1fcbe 176 int RCS730::setRegSlaveAddr(int SAddr)
hiro99ma 0:6efd0ff1fcbe 177 {
hiro99ma 0:6efd0ff1fcbe 178 int ret;
hiro99ma 0:6efd0ff1fcbe 179
hiro99ma 0:6efd0ff1fcbe 180 ret = writeRegister(REG_I2C_SLAVE_ADDR, static_cast<uint32_t>(SAddr));
hiro99ma 0:6efd0ff1fcbe 181
hiro99ma 0:6efd0ff1fcbe 182 if (ret == 0) {
hiro99ma 0:6efd0ff1fcbe 183 _slvAddr = SAddr << 1;
hiro99ma 0:6efd0ff1fcbe 184 }
hiro99ma 0:6efd0ff1fcbe 185
hiro99ma 0:6efd0ff1fcbe 186 return ret;
hiro99ma 0:6efd0ff1fcbe 187 }
hiro99ma 0:6efd0ff1fcbe 188
hiro99ma 0:6efd0ff1fcbe 189
hiro99ma 0:6efd0ff1fcbe 190 int RCS730::setRegInterruptMask(uint32_t Mask, uint32_t Value)
hiro99ma 0:6efd0ff1fcbe 191 {
hiro99ma 0:6efd0ff1fcbe 192 return writeRegister(REG_INT_MASK, Value, Mask);
hiro99ma 0:6efd0ff1fcbe 193 }
hiro99ma 0:6efd0ff1fcbe 194
hiro99ma 0:6efd0ff1fcbe 195
hiro99ma 0:6efd0ff1fcbe 196 int RCS730::setRegPlugSysCode(PlugSysCode SysCode)
hiro99ma 0:6efd0ff1fcbe 197 {
hiro99ma 0:6efd0ff1fcbe 198 return writeRegister(REG_PLUG_CONF1, static_cast<uint32_t>(SysCode), 0x00000002);
hiro99ma 0:6efd0ff1fcbe 199 }
hiro99ma 0:6efd0ff1fcbe 200
hiro99ma 0:6efd0ff1fcbe 201
hiro99ma 0:6efd0ff1fcbe 202 int RCS730::goToInitializeStatus()
hiro99ma 0:6efd0ff1fcbe 203 {
hiro99ma 0:6efd0ff1fcbe 204 return writeRegisterForce(REG_INIT_CTRL, 0x0000004a);
hiro99ma 0:6efd0ff1fcbe 205 }
hiro99ma 0:6efd0ff1fcbe 206
hiro99ma 0:6efd0ff1fcbe 207
hiro99ma 0:6efd0ff1fcbe 208 int RCS730::initFTMode(OpMode Mode)
hiro99ma 0:6efd0ff1fcbe 209 {
hiro99ma 0:6efd0ff1fcbe 210 int ret;
hiro99ma 0:6efd0ff1fcbe 211
hiro99ma 0:6efd0ff1fcbe 212 if (OPMODE_PLUG < Mode) {
hiro99ma 0:6efd0ff1fcbe 213 return -1;
hiro99ma 0:6efd0ff1fcbe 214 }
hiro99ma 0:6efd0ff1fcbe 215
hiro99ma 0:6efd0ff1fcbe 216 ret = setRegOpMode(Mode);
hiro99ma 0:6efd0ff1fcbe 217 if (ret == 0) {
hiro99ma 0:6efd0ff1fcbe 218 //ret = setRegInterruptMask(MSK_INT_TAG_TX_DONE | MSK_INT_TAG_RW_RX_DONE2, 0);
hiro99ma 0:6efd0ff1fcbe 219 ret = setRegInterruptMask(MSK_INT_TAG_RW_RX_DONE2, 0);
hiro99ma 0:6efd0ff1fcbe 220 }
hiro99ma 0:6efd0ff1fcbe 221
hiro99ma 0:6efd0ff1fcbe 222 return ret;
hiro99ma 0:6efd0ff1fcbe 223 }
hiro99ma 0:6efd0ff1fcbe 224
hiro99ma 0:6efd0ff1fcbe 225
hiro99ma 0:6efd0ff1fcbe 226 #if 0
hiro99ma 0:6efd0ff1fcbe 227 int RCS730::initNfcDepMode()
hiro99ma 0:6efd0ff1fcbe 228 {
hiro99ma 0:6efd0ff1fcbe 229 int ret;
hiro99ma 0:6efd0ff1fcbe 230
hiro99ma 0:6efd0ff1fcbe 231 ret = setRegOpMode(OPMODE_NFCDEP);
hiro99ma 0:6efd0ff1fcbe 232 if (ret == 0) {
hiro99ma 0:6efd0ff1fcbe 233 ret = setRegInterruptMask(MSK_INT_TAG_TX_DONE | MSK_INT_TAG_NFC_DEP_RX_DONE, 0);
hiro99ma 0:6efd0ff1fcbe 234 }
hiro99ma 0:6efd0ff1fcbe 235
hiro99ma 0:6efd0ff1fcbe 236 return ret;
hiro99ma 0:6efd0ff1fcbe 237 }
hiro99ma 0:6efd0ff1fcbe 238 #endif
hiro99ma 0:6efd0ff1fcbe 239
hiro99ma 0:6efd0ff1fcbe 240
hiro99ma 0:6efd0ff1fcbe 241 void RCS730::isrIrq()
hiro99ma 0:6efd0ff1fcbe 242 {
hiro99ma 0:6efd0ff1fcbe 243 int ret;
hiro99ma 0:6efd0ff1fcbe 244 bool b_send = false;
hiro99ma 0:6efd0ff1fcbe 245 uint32_t intstat;
hiro99ma 0:6efd0ff1fcbe 246 uint8_t rf_buf[256];
hiro99ma 0:6efd0ff1fcbe 247
hiro99ma 0:6efd0ff1fcbe 248 ret = readRegister(REG_INT_STATUS, &intstat);
hiro99ma 0:6efd0ff1fcbe 249 if (ret == 0) {
hiro99ma 0:6efd0ff1fcbe 250
hiro99ma 0:6efd0ff1fcbe 251 if (intstat & MSK_INT_TAG_RW_RX_DONE2) {
hiro99ma 0:6efd0ff1fcbe 252 //Read or Write w/o Enc Rx done for HT block
hiro99ma 0:6efd0ff1fcbe 253 int len = read_rf_buf(this, rf_buf);
hiro99ma 0:6efd0ff1fcbe 254 if (len > 0) {
hiro99ma 0:6efd0ff1fcbe 255 switch (rf_buf[1]) {
hiro99ma 0:6efd0ff1fcbe 256 case 0x06: //Read w/o Enc
hiro99ma 0:6efd0ff1fcbe 257 if (_cbTable.pCbRxHTRDone) {
hiro99ma 0:6efd0ff1fcbe 258 b_send = (*_cbTable.pCbRxHTRDone)(_cbTable.pUserData, rf_buf, len);
hiro99ma 0:6efd0ff1fcbe 259 }
hiro99ma 0:6efd0ff1fcbe 260 break;
hiro99ma 0:6efd0ff1fcbe 261 case 0x08: //Write w/o Enc;
hiro99ma 0:6efd0ff1fcbe 262 if (_cbTable.pCbRxHTWDone) {
hiro99ma 0:6efd0ff1fcbe 263 b_send = (*_cbTable.pCbRxHTWDone)(_cbTable.pUserData, rf_buf, len);
hiro99ma 0:6efd0ff1fcbe 264 }
hiro99ma 0:6efd0ff1fcbe 265 break;
hiro99ma 0:6efd0ff1fcbe 266 default:
hiro99ma 0:6efd0ff1fcbe 267 break;
hiro99ma 0:6efd0ff1fcbe 268 }
hiro99ma 0:6efd0ff1fcbe 269 }
hiro99ma 0:6efd0ff1fcbe 270 }
hiro99ma 0:6efd0ff1fcbe 271 #if 0
hiro99ma 0:6efd0ff1fcbe 272 if (_cbTable.pCbRxDepDone && (intstat & MSK_INT_TAG_NFC_DEP_RX_DONE)) {
hiro99ma 0:6efd0ff1fcbe 273 //DEP command Rx done
hiro99ma 0:6efd0ff1fcbe 274 int len = read_rf_buf(this, rf_buf);
hiro99ma 0:6efd0ff1fcbe 275 (*_cbTable.pCbRxDepDone)(_cbTable.pUserData, rf_buf, len);
hiro99ma 0:6efd0ff1fcbe 276 }
hiro99ma 0:6efd0ff1fcbe 277 if (_cbTable.pCbTxDone && (intstat & MSK_INT_TAG_TX_DONE)) {
hiro99ma 0:6efd0ff1fcbe 278 //Tx Done
hiro99ma 0:6efd0ff1fcbe 279 int len = read_rf_buf(this, rf_buf);
hiro99ma 0:6efd0ff1fcbe 280 (*_cbTable.pCbTxDone)(_cbTable.pUserData, rf_buf, len);
hiro99ma 0:6efd0ff1fcbe 281 }
hiro99ma 0:6efd0ff1fcbe 282
hiro99ma 0:6efd0ff1fcbe 283 uint32_t intother = intstat & ~(MSK_INT_TAG_TX_DONE | MSK_INT_TAG_NFC_DEP_RX_DONE | MSK_INT_TAG_RW_RX_DONE2);
hiro99ma 0:6efd0ff1fcbe 284 if (_cbTable.pCbOther && intother) {
hiro99ma 0:6efd0ff1fcbe 285 (*_cbTable.mCbOther)(_cbTable.pUserData, 0, intother);
hiro99ma 0:6efd0ff1fcbe 286 }
hiro99ma 0:6efd0ff1fcbe 287 #endif
hiro99ma 0:6efd0ff1fcbe 288
hiro99ma 0:6efd0ff1fcbe 289 //response
hiro99ma 0:6efd0ff1fcbe 290 if (b_send) {
hiro99ma 0:6efd0ff1fcbe 291 ret = pageWrite(BUF_RF_COMM, rf_buf, rf_buf[0]);
hiro99ma 0:6efd0ff1fcbe 292 if (ret == 0) {
hiro99ma 0:6efd0ff1fcbe 293 set_tag_rf_send_enable(this);
hiro99ma 0:6efd0ff1fcbe 294 }
hiro99ma 0:6efd0ff1fcbe 295 }
hiro99ma 0:6efd0ff1fcbe 296
hiro99ma 0:6efd0ff1fcbe 297 writeRegisterForce(REG_INT_CLEAR, intstat);
hiro99ma 0:6efd0ff1fcbe 298 }
hiro99ma 0:6efd0ff1fcbe 299 }
hiro99ma 0:6efd0ff1fcbe 300
hiro99ma 0:6efd0ff1fcbe 301
hiro99ma 0:6efd0ff1fcbe 302
hiro99ma 0:6efd0ff1fcbe 303