Skip to content

Commit 219449f

Browse files
committed
Extend existing code base to allow control of A1 too.
1 parent 50472fb commit 219449f

File tree

5 files changed

+76
-2
lines changed

5 files changed

+76
-2
lines changed

examples/tools/Control-DIOx/Control-DIOx.ino

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void loop()
109109
/* Modify this function call parameter if you want
110110
* to test a different LAN8651 DIO.
111111
*/
112-
tc6_inst->digitalWrite(TC6::DIO::A0, dio_val);
112+
tc6_inst->digitalWrite(TC6::DIO::A1, dio_val);
113113
dio_val = !dio_val;
114114
}
115115
}

src/microchip/TC6_Arduino_10BASE_T1S.cpp

+19
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ void TC6_Arduino_10BASE_T1S::digitalWrite(DIO const dio, bool const value)
202202
{
203203
if (dio == DIO::A0)
204204
digitalWrite_A0(value);
205+
else if (dio == DIO::A1)
206+
digitalWrite_A1(value);
205207
}
206208

207209
void TC6_Arduino_10BASE_T1S::service()
@@ -260,6 +262,23 @@ void TC6_Arduino_10BASE_T1S::digitalWrite_A0(bool const value)
260262
}
261263
}
262264

265+
void TC6_Arduino_10BASE_T1S::digitalWrite_A1(bool const value)
266+
{
267+
static bool is_dio_a1_enabled = false;
268+
if (!is_dio_a1_enabled)
269+
{
270+
TC6Regs_EnableDio_A1(_lw.tc.tc6);
271+
is_dio_a1_enabled = true;
272+
}
273+
274+
static bool dio_a1_val = false;
275+
if (value != dio_a1_val)
276+
{
277+
TC6Regs_ToggleDio_A1(_lw.tc.tc6);
278+
dio_a1_val = value;
279+
}
280+
}
281+
263282
/**************************************************************************************
264283
* LWIP CALLBACKS
265284
**************************************************************************************/

src/microchip/TC6_Arduino_10BASE_T1S.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ namespace TC6
6565
* TYPEDEF
6666
**************************************************************************************/
6767

68-
enum class DIO { A0, A1, A2, A3, A4, B0 };
68+
enum class DIO { A0, A1 };
6969

7070
/**************************************************************************************
7171
* CLASS DECLARATION
@@ -105,6 +105,7 @@ class TC6_Arduino_10BASE_T1S : public Arduino_10BASE_T1S_PHY_Interface
105105
T1SPlcaSettings _t1s_plca_settings;
106106

107107
void digitalWrite_A0(bool const value);
108+
void digitalWrite_A1(bool const value);
108109
};
109110

110111
/**************************************************************************************

src/microchip/lib/libtc6/inc/tc6-regs.h

+20
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,24 @@ enum class PADCTRL_A0SEL : uint32_t
9191
};
9292
constexpr uint32_t PADCTRL_A0SEL_MASK = 0x00000003;
9393

94+
enum class PADCTRL_A1SEL : uint32_t
95+
{
96+
EVENT_CAPTURE = 0x00 << 2,
97+
EVENT_GENERATOR_1 = 0x01 << 2
98+
};
99+
100+
constexpr uint32_t PADCTRL_A1SEL_MASK = 0x0000000C;
101+
94102
enum class EG0CTL : uint32_t
95103
{
96104
START = 0,
97105
};
98106

107+
enum class EG1CTL : uint32_t
108+
{
109+
START = 0,
110+
};
111+
99112
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
100113
/* PUBLIC API */
101114
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
@@ -142,8 +155,15 @@ bool TC6Regs_SetPlca(TC6_t *pInst, bool plcaEnable, uint8_t nodeId, uint8_t node
142155
*/
143156
bool TC6Regs_SetDio(TC6_t *pTC6, bool dioa0, bool dioa1, bool dioa2);
144157

158+
/** \brief Configure DIOAx GPIOs as output.
159+
*/
145160
void TC6Regs_EnableDio_A0(TC6_t *pTC6);
161+
void TC6Regs_EnableDio_A1(TC6_t *pTC6);
162+
163+
/** \brief Toogle DIOAx GPIOs - initial state after enabling is LOW.
164+
*/
146165
void TC6Regs_ToggleDio_A0(TC6_t *pTC6);
166+
void TC6Regs_ToggleDio_A1(TC6_t *pTC6);
147167

148168
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
149169
/* Implementation of TC6 Callback */

src/microchip/lib/libtc6/src/tc6-regs.cpp

+34
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,40 @@ void TC6Regs_ToggleDio_A0(TC6_t *pTC6)
245245
}
246246
}
247247

248+
static bool is_dio_a1_op_done = false;
249+
void TC6_Dio_A1_Callback(TC6_t *pInst, bool success, uint32_t addr, uint32_t value, void *pTag, void *pGlobalTag)
250+
{
251+
is_dio_a1_op_done = true;
252+
}
253+
254+
void TC6Regs_EnableDio_A1(TC6_t *pTC6)
255+
{
256+
TC6Reg_t * pReg = GetContext(pTC6);
257+
258+
/* Configure as output, PADCTRL = 0x0088. */
259+
uint32_t reg_val = to_integer(PADCTRL_A1SEL::EVENT_GENERATOR_1);
260+
uint32_t reg_mask = PADCTRL_A1SEL_MASK;
261+
262+
is_dio_a1_op_done = false;
263+
while (!is_dio_a1_op_done && !TC6_ReadModifyWriteRegister(pReg->pTC6, 0x000A0088, reg_val, reg_mask, CONTROL_PROTECTION, TC6_Dio_A0_Callback, NULL)) {
264+
TC6_Service(pReg->pTC6, true);
265+
}
266+
}
267+
268+
void TC6Regs_ToggleDio_A1(TC6_t *pTC6)
269+
{
270+
TC6Reg_t * pReg = GetContext(pTC6);
271+
272+
/* Toggle output, EG1CTL = 0x022C. */
273+
uint32_t reg_val = bm(EG1CTL::START);
274+
uint32_t reg_mask = bm(EG1CTL::START);;
275+
276+
is_dio_a1_op_done = false;
277+
while (!is_dio_a1_op_done && !TC6_ReadModifyWriteRegister(pReg->pTC6, 0x000A022C, reg_val, reg_mask, CONTROL_PROTECTION, TC6_Dio_A0_Callback, NULL)) {
278+
TC6_Service(pReg->pTC6, true);
279+
}
280+
}
281+
248282
uint8_t TC6Regs_GetChipRevision(TC6_t *pTC6)
249283
{
250284
TC6Reg_t *pReg = GetContext(pTC6);

0 commit comments

Comments
 (0)