Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Erik Strand
lufa
Commits
35dac470
Commit
35dac470
authored
Dec 24, 2009
by
Dean Camera
Browse files
Complete TPI protocol code to enter and exit TPI programming mode for the ATTINY 6-pin devices.
parent
65fcebf4
Changes
4
Hide whitespace changes
Inline
Side-by-side
Projects/AVRISP/Lib/XPROG/TINYNVM.c
View file @
35dac470
...
...
@@ -38,44 +38,35 @@
#if defined(ENABLE_XPROG_PROTOCOL) || defined(__DOXYGEN__)
/** Busy-waits while the NVM controller is busy performing a NVM operation, such as a FLASH page read or CRC
* calculation.
/** Busy-waits while the NVM controller is busy performing a NVM operation, such as a FLASH page read.
*
* \return Boolean true if the NVM controller became ready within the timeout period, false otherwise
*/
bool
XMEGA
NVM_WaitWhileNVMBusBusy
(
void
)
bool
TINY
NVM_WaitWhileNVMBusBusy
(
void
)
{
// TODO
TCNT0
=
0
;
TIFR0
=
(
1
<<
OCF1A
);
uint8_t
TimeoutMS
=
TINY_NVM_BUSY_TIMEOUT_MS
;
return
false
;
}
/* Poll the STATUS register to check to see if NVM access has been enabled */
while
(
TimeoutMS
)
{
/* Send the SLDCS command to read the TPI STATUS register to see the NVM bus is active */
XPROGTarget_SendByte
(
TPI_CMD_SLDCS
|
TPI_STATUS_REG
);
if
(
XPROGTarget_ReceiveByte
()
&
TPI_STATUS_NVM
)
return
true
;
/** Waits while the target's NVM controller is busy performing an operation, exiting if the
* timeout period expires.
*
* \return Boolean true if the NVM controller became ready within the timeout period, false otherwise
*/
bool
XMEGANVM_WaitWhileNVMControllerBusy
(
void
)
{
// TODO
if
(
TIFR0
&
(
1
<<
OCF1A
))
{
TIFR0
=
(
1
<<
OCF1A
);
TimeoutMS
--
;
}
}
return
false
;
}
/** Retrieves the CRC value of the given memory space.
*
* \param[in] CRCCommand NVM CRC command to issue to the target
* \param[out] CRCDest CRC Destination when read from the target
*
* \return Boolean true if the command sequence complete successfully
*/
bool
XMEGANVM_GetMemoryCRC
(
const
uint8_t
CRCCommand
,
uint32_t
*
const
CRCDest
)
{
// TODO
return
true
;
}
/** Reads memory from the target's memory spaces.
*
* \param[in] ReadAddress Start address to read from within the target's address space
...
...
@@ -84,7 +75,7 @@ bool XMEGANVM_GetMemoryCRC(const uint8_t CRCCommand, uint32_t* const CRCDest)
*
* \return Boolean true if the command sequence complete successfully
*/
bool
XMEGA
NVM_ReadMemory
(
const
uint32_t
ReadAddress
,
uint8_t
*
ReadBuffer
,
const
uint16_t
ReadSize
)
bool
TINY
NVM_ReadMemory
(
const
uint32_t
ReadAddress
,
uint8_t
*
ReadBuffer
,
const
uint16_t
ReadSize
)
{
// TODO
...
...
@@ -99,7 +90,7 @@ bool XMEGANVM_ReadMemory(const uint32_t ReadAddress, uint8_t* ReadBuffer, const
*
* \return Boolean true if the command sequence complete successfully
*/
bool
XMEGA
NVM_WriteMemory
(
const
uint8_t
WriteCommand
,
const
uint32_t
WriteAddress
,
const
uint8_t
*
WriteBuffer
)
bool
TINY
NVM_WriteMemory
(
const
uint8_t
WriteCommand
,
const
uint32_t
WriteAddress
,
const
uint8_t
*
WriteBuffer
)
{
// TODO
...
...
@@ -113,7 +104,7 @@ bool XMEGANVM_WriteMemory(const uint8_t WriteCommand, const uint32_t WriteAddres
*
* \return Boolean true if the command sequence complete successfully
*/
bool
XMEGA
NVM_EraseMemory
(
const
uint8_t
EraseCommand
,
const
uint32_t
Address
)
bool
TINY
NVM_EraseMemory
(
const
uint8_t
EraseCommand
,
const
uint32_t
Address
)
{
// TODO
...
...
Projects/AVRISP/Lib/XPROG/TINYNVM.h
View file @
35dac470
...
...
@@ -59,10 +59,9 @@
#define TINY_NVM_BUSY_TIMEOUT_MS 100
/* Function Prototypes: */
bool
TINYNVM_WaitWhileNVM
Controller
Busy
(
void
);
bool
TINYNVM_WaitWhileNVM
Bus
Busy
(
void
);
bool
TINYNVM_ReadMemory
(
const
uint32_t
ReadAddress
,
uint8_t
*
ReadBuffer
,
const
uint16_t
ReadSize
);
bool
TINYNVM_WriteMemory
(
const
uint8_t
WriteCommand
,
const
uint32_t
WriteAddress
,
const
uint8_t
*
WriteBuffer
);
bool
TINYNVM_EraseMemory
(
const
uint8_t
EraseCommand
,
const
uint32_t
Address
);
bool
TINYNVM_WaitWhileNVMBusBusy
(
void
);
#endif
Projects/AVRISP/Lib/XPROG/XMEGANVM.h
View file @
35dac470
...
...
@@ -108,6 +108,7 @@
/* Function Prototypes: */
void
XMEGANVM_SendNVMRegAddress
(
const
uint8_t
Register
);
void
XMEGANVM_SendAddress
(
const
uint32_t
AbsoluteAddress
);
bool
XMEGANVM_WaitWhileNVMBusBusy
(
void
);
bool
XMEGANVM_WaitWhileNVMControllerBusy
(
void
);
bool
XMEGANVM_GetMemoryCRC
(
const
uint8_t
CRCCommand
,
uint32_t
*
const
CRCDest
);
bool
XMEGANVM_ReadMemory
(
const
uint32_t
ReadAddress
,
uint8_t
*
ReadBuffer
,
const
uint16_t
ReadSize
);
...
...
@@ -116,6 +117,5 @@
const
uint8_t
WritePageCommand
,
const
uint8_t
PageMode
,
const
uint32_t
WriteAddress
,
const
uint8_t
*
WriteBuffer
,
const
uint16_t
WriteSize
);
bool
XMEGANVM_EraseMemory
(
const
uint8_t
EraseCommand
,
const
uint32_t
Address
);
bool
XMEGANVM_WaitWhileNVMBusBusy
(
void
);
#endif
Projects/AVRISP/Lib/XPROG/XPROGProtocol.c
View file @
35dac470
...
...
@@ -132,7 +132,13 @@ static void XPROGProtocol_EnterXPROGMode(void)
/* Enable TPI programming mode with the attached target */
XPROGTarget_EnableTargetTPI
();
// TODO - enable NVM bus via KEY
/* Enable access to the XPROG NVM bus by sending the documented NVM access key to the device */
XPROGTarget_SendByte
(
TPI_CMD_SKEY
);
for
(
uint8_t
i
=
sizeof
(
TPI_NVMENABLE_KEY
);
i
>
0
;
i
--
)
XPROGTarget_SendByte
(
TPI_NVMENABLE_KEY
[
i
-
1
]);
/* Wait until the NVM bus becomes active */
NVMBusEnabled
=
TINYNVM_WaitWhileNVMBusBusy
();
}
Endpoint_Write_Byte
(
CMD_XPROG
);
...
...
@@ -159,7 +165,9 @@ static void XPROGProtocol_LeaveXPROGMode(void)
}
else
{
// TODO - Disable TPI via register
/* Clear the NVMEN bit in the TPI CONTROL register to disable TPI mode */
XPROGTarget_SendByte
(
TPI_CMD_SSTCS
|
TPI_CTRL_REG
);
XPROGTarget_SendByte
(
0x00
);
XPROGTarget_DisableTargetTPI
();
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment