AMDL: Add support to Peripheral as Output with Read back. From Alan Carvalho de Assis.

This commit is contained in:
Alan Carvalho de Assis 2015-07-12 09:23:40 -06:00 committed by Gregory Nutt
parent 5ace3311d9
commit 21905bff31
2 changed files with 34 additions and 2 deletions

View File

@ -310,11 +310,26 @@ static inline void sam_configperiph(uintptr_t base, port_pinset_t pinset)
pin = (pinset & PORT_PIN_MASK) >> PORT_PIN_SHIFT;
bit = (1 << pin);
/* If pin is output with readback then set the pin as output */
if ((pinset & PORT_OUTREADBACK_MASK) == PORT_OUTREADBACK_ENABLE)
{
putreg32(bit, base + SAM_PORT_DIRSET_OFFSET);
}
/* Set the pin configuration. This will be an peripheral with the
* selected function.
*/
regval = (PORT_WRCONFIG_WRPINCFG | PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_PMUXEN);
/* If pin is output with readback then enable the input buffer */
if ((pinset & PORT_OUTREADBACK_MASK) == PORT_OUTREADBACK_ENABLE)
{
regval |= PORT_WRCONFIG_INEN;
}
if (pin > 16)
{
/* Select the upper half word and adjust the bit setting */

View File

@ -76,9 +76,9 @@
* ------------ -----------------------------
* PORT Input: MMRR .... .S.. .... ..PB BBBB
* PORT Output: MM.. .... D..V .... ..PB BBBB
* Peripheral: MM.. FFF. .... II.. ..PB BBBB
* Peripheral: MM.. FFFO .... II.. ..PB BBBB
* ------------ -----------------------------
* MMRR FFF. DS.V II.. ..PB BBBB
* MMRR FFFO DS.V II.. ..PB BBBB
*/
/* Input/output/peripheral mode:
@ -162,6 +162,23 @@
#define PORT_FUNCG (PORT_PERIPHERAL | _PORT_FUNCG) /* Function G */
#define PORT_FUNCH (PORT_PERIPHERAL | _PORT_FUNCH) /* Function H */
/* Output and Input Buffer both enabled to let readback
*
* MODE BITFIELDS
* ------------ -----------------------------
* 2222 1111 1111 1100 0000 0000
* 3210 9876 5432 1098 7654 3210
* ------------ -----------------------------
* PORT Input: .... .... .... .... .... ....
* PORT Output: .... .... .... .... .... ....
* Peripheral: .... ...O .... .... .... ....
*/
#define PORT_OUTREADBACK_SHIFT (16) /* Bit 16: Pin output and input buffer enabled */
#define PORT_OUTREADBACK_MASK (1 << PORT_OUTREADBACK_SHIFT)
# define PORT_OUTREADBACK_DISABLE (0 << PORT_OUTREADBACK_SHIFT)
# define PORT_OUTREADBACK_ENABLE (1 << PORT_OUTREADBACK_SHIFT)
/* Output drive control
*
* MODE BITFIELDS