Está en la página 1de 12

CURSO BÁSICO DE PSOC 4

17 DE OCTUBRE DE 2016

Introducción al PSoC 4
El PSoC 4 Es una familia de microcontroladores de señal mezclada basados en el núcleo ARM
Cortex-M0 y Cortex-M0+. En él se mezclan la gran capacidad de procesamiento y baja potencia de los
procesadores de 32 bits de ARM con el hardware de señal mezclada programable de Cypress
Semiconductores, logrando así una de las arquitecturas más flexibles que hay en el Mercado capaz de
funcionar con voltajes de 1.71 a 5.5V, lo que los convierte en ideales para aplicaciones a baterías.
El PSoC 4 está pensado en el desarrollo de sistemas completos con un mínimo de componentes
externas, que otros micros necesitan como son amplificadores, ADCs, DACs y ASICs, reduciendo los
costos totales del sistema. Además la flexibilidad de sus subsistemas permite realizar modificaciones
de última hora, sin necesidad de incurrir en lastos costos de rediseño.
Su módulo CapSense el de los mejores en el mercado, con una gran razón señal a ruido, y la
capacidad de integrar varios tipos de sensores capacitivos como botones, Sliders, Pads y Sensores
de proximidad. Lo cual hace posible diseñar interfaces de usuario muy atractivas, seguras de usar en
ambientes volátiles donde no es posible usar interruptores mecánicos.
Ofrece además uno de los mejores esquemas de consumo de corriente a solo 150nA en modo
de retención y solo 20nA en modo de No retención.
Entre las diferentes familias del PSoC 4 Podemos encontrar soluciones para diferentes
necesidades de comunicación, como la Serie M, que incluye la Interfaz CAN, la Serie S, que tiene USB
o la Serie BL, con BlueTooth BLE integrado. Las Familias del PSoC 4 están en constante crecimiento,
y con la adquisición de Broadcom por Cypress, podemos esperar nuevos módulos de comunicaciones
en un futuro.

Figura 1.1 Familias de MCUs PSoC 4


La familia 4000 es la más barata, tiene un núcleo Cortex-M0 de 32 bits a 16MHz, 16Kb de
Flash, 2Kb de RAM, 1 comparador analógico, 2 IDACs, 1 módulo TCPWM, 1 interfaz Serial (SCB), y
CapSense en sus 20 GPIOs.

Los 4000S es una mejora al anterior, con un procesador Cortex-M0+ de 332 bits a 48MHz, 32Kb
de Flash, 4KB de RAM, ADC de 10 Bits, 3 comparadores analógicos, 2 IDACs, 16 módulos SMART IO, 5
módulos TCPWM, 2 interfaces Seriales (SCB), y CapSense en sus 36 GPIOs. La serie S es la más nueva
desarrollada por Cypress, por lo que aún no hay kits de evaluación a la venta en la página (aunque a
anunciaron uno).

La Familia 4100 incluye integración Analógica mediante el uso de Bloques Programables


Analógicos. Estos son módulos de Hardware que pueden configurarse para crear circuitos de
acondicionamiento de señal con amplificadores operacionales filtros. Esta familia incluye la serie básica
4100, al 4100S, 4100M y 4100BLE

La familia 4200, mejora aún más la flexibilidad y desempeño del PSoC 4, al agregarle Bloques
digitales Programables. Estos pueden usarse para implementar periféricos, lógica de interconexión, etc.
con la misma funcionalidad de un CPLD (Complex Programmable Logic Device). Las series que incluye
esta familia son la 4200, 4200L, 4200M y 4200BL.

4000 4000S 4100 4100S 4100M 4100BL 4200 4200L 4200M 4200BL
Núcleo M0 M0+ M0 M0+ M0 M0 M0 M0+ M0 M0
Velocidad 16MHz 48MHz 24Mhz 48MHz 24MHz 48MHz 48MHz 48MHz 48MHz 48MHz
Flash 16KB 32KB 32KB 64KB 128KB 128KB 32KB 256KB 128KB 256KB
RAM 2KB 4KB 4KB 8KB 16KB 16KB 4KB 32KB 16KB 32KB
ADC 10 Bits
10 Bits Single
CSD 12 Bit 12 Bit 12 Bit 12 Bit 12 Bit 12 Bit 12 Bit
Single Slope
ADC SAR SAR SAR SAR SAR SAR SAR
Slope 12 Bit
SAR
Op Amps 0 0 2 2 4 2 2 4 4 4
Comparadores 1 1 4 5 6 2 4 6 6 4
IDACs 2 2 2 2 4 2 2 4 4 2
Universal Digital
0 0 0 0 0 0 4 8 4 4
Block (UDB)
SMART IO 0 16 0 16 0 0 0 0 0 0
TCPWM 1 5 4 5 8 4 4 8 8 4
Serial
Comunication 1 2 2 3 4 2 2 4 4 2
Block (SCB)
CAN 0 0 0 0 0 0 0 2 2 0
BlueTooth BLE 0 0 0 0 0 1 0 0 0 1
USB 0 0 0 0 0 0 0 FS 0 0
Bloques
1 1 1 1 2 1 1 2 2 1
CapSense
GPIO 20 36 36 36 55 36 36 98 55 36
Canales DMA 0 0 0 0 8 8 0 32 8 0

Tabla 1.1 Comparación entre Familias de PSoC 4


Diferencias entre el PSoC y los MCUs Tradicionales.

En los MCUs tradicionales, se hace énfasis en el núcleo. Toda la arquitectura se diseña agregando
diferentes módulos como ADCs, SPI, UARTs, etc., en torno a un núcleo que los controla, por lo que cualquier
control que se desee ejercer sobre dichos módulos queda a cargo del núcleo.

Eso limita grandemente la flexibilidad de los sistemas, ya que cada módulo tiene asignadas ciertas
terminales de entrada y salida, que no pueden modificarse, y no es permitido la interconexión de diferentes
módulos entre sí de manera directa. El CPU dirige el funcionamiento de todos, lo que le crea una carga que
limita la cantidad de tiempo que puede dedicarse a otras cosas. Sin el CPU funcionando, NADA funciona.

Figura 1.2 Arquitectura de un MCU Tradicional

Por otro lado los PSoC de Cypress, hacen énfasis en la conectividad. En el PSoC todos los
elementos, CPU, ADCs, UARTs, etc son igual de importantes, por lo que la interconexión de estos sistemas
toma prioridad, todos pueden interconectarse entre sí, no solo con el CPU.

Los Periféricos Analógicos Digitales se interconectan mediante una matriz reconfigurable de señales
y buses de datos, que permite la creación de nuevos periférico que cumplan con las necesidades de tu
diseño. Como El CPU también puede controlar los dispositivos, se crea una arquitectura que puede realizar
las mismas tareas que cualquier MCU convencional, pero que además puede funcionar sin necesidad de
que el CPU tome el control, cosa que otros MCUs no pueden hacer.

Figura 1.3 Arquitectura de un PSoC 4

Por ejemplo: una aplicación típica puede requerir programar una máquina de estados para encender
y apagar salidas de acuerdo a ciertas entradas. En un MCU tradicional, el CPU necesita correr un programa
que lea las entradas y cambie las salidas de manera correspondiente. Sin embargo en el PSoC, es posible
definir mediante hardware dicha máquina de estado, para que funcione de manera independiente del CPU
como se ve en los ejemplos 1 y 2 del curso.

PSoC 4 Pioneer Kit Serie M (CY8CKIT-044).

En el presente curso vamos a trabajar con el Pioneer Kit CY8CKIT-044, que trabaja con la serie
4200M del PSoC 4. Este kit es compatible con shields de Arduino, y trae terminales y convertidores de nivel
para conectarlo a la Raspberry Pi para usarlo como un coprocesador Analógico. Tiene Pads Gestuales para
usar con el módulo de CapSense, Sensores de proximidad, Sensor de luz ambiental, sensor de
Temperatura, Acelerómetro, FRAM externa de 1Mbit, un interruptor y un LED RGB.

Contiene también un PSoC5 para usarlo como Programador/Debugger y puente USB/UART/I2C.

Figura1.6 Tarjeta CY8CKIT-044

Figura 1.5 Diagrama a Bloques del CY8CKIT-044


Arquitectura del PSoC 4200M.

La figura 1.6 Muestra la Arquitectura del PSoC 4200M

Figura 1.6 Arquitectura del PSoC 4200M.

Sus Principales características son:

 CPU ARM Cortex-M0 con multiplicación de 1 ciclo.


 128KB de Flash y 16KB de RAM
 Detector de BrownOut (BOD)
 8 Módulos TCPWM de 16 bits.
 Un ADC SAR de 12 bits con una tasa de muestreo de hasta 1Msps, con harware secuenciador de
entradas.
 2 Amplificadores operacionales para condicionamiento de señales.
 2 Comparadores de Baja Potencia.
 2 Bloques de Comunicación Serial (SCB) capaces de trabajar como SPI, UART, I2C y Red de
Interconexión local (LIN).
 4 Bloques Digitales Universales Programables (UDB).
 CapSense.
 Drivers directos de LCD.
 4 Modos de Bajo consumo: Sleep, Deep Sleep, Hibernate y Stop.
 Programación depuración mediante SWD (Serial Wire Debug).
 Controlador de Interrupciones NVIC (Nested Vectored Interrupt Controller) con 32 entradas y una
entrada NMI (Non Maskarable Interrupt) que puede ser atada a cualquier ruta digital
 Controlador de Reanudación WIC (Wakeup Interrupt Controller) para sacar al CPU del modo Sleep
Deep Sleep.
 Oscilador principal Interno (IMO) con una exactitud de ±2% que puede ser ajustado de 3MHz a 48
MHz en pasos de hasta 1 Hz.
 Oscilador Interno de Baja Velocidad (ILO) con una exactitud de ±60%.
 Opción para Usar Osciladores Externos.
 Voltajes de Operación de 1.71V a 5.5V
 GPIOs con 4 diferentes modos de drive, Modo de retención, Velocidad de cambio seleccionable y
Capacidad CapSense y de Interrupción.
 Mini Bloque de Tiempo Continuo (CTBm)
 2 IDACs.
 2 Interfaces CAN.

PSoC Creator IDE (Integrated Design Environment)

Una de las grandes ventajas de usar el PSoC es su entorno de programación, el PSoC Creator IDE.
Este es un sistema grafico muy fácil de usar, que puede ser usado en casi todas las familias de
Microcontroladores PSoC (Excepto el PSoC 1, que usa el PSoC Designer). Por lo que la gran maoria de los
diseños hechos en este ambiente de desarrollo son fácilmente portables a otros MCUs como son el PSoC
3 y PSoC5.

El PSoC Creator incluye cientos de bibliotecas de componentes pre configurados, que han sido
debidamente comprobados y documentados por los ingenieros de desarrollo de Cypress Semiconductores.

Gracias a su interfaz intuitiva es posible arrastrar, pegar y copiar componentes al espacio de trabajo,
visualizar las interacciones entre los componentes de forma gráfica, configurar componentes mediante
herramientas sencillas (wizards), visualizar las hojas de datos de cientos de componentes, accesar de
manera sencilla a ejemplos documentación en línea, así como crear tus propios componentes o usar
componentes creados por la comunidad.

Figura 1.7 PSoC Designer IDE

1. Área de Trabajo
2. Explorador de Archivos de Proyecto
3. Herramientas de Configuración
4. Librería de Componentes
5. Hojas de Datos de Componentes
Ejemplos en el PSoC Creator.

El PSoC Creator permite accesar a una gran cantidad de ejemplos de código. Estos están accesibles
desde la Página de inicio como puede verse en la figura 1.8. Esto permite mejorar la experiencia de
aprendizaje, así como realizar de forma más rápida nuevos proyectos al reutilizar componentes de los
ejemplos.

Los ejemplos se encuentran organizados por dispositivo o por componente. Y tiene una herramienta
que permite filtrar los resultados de las búsquedas.

Figura 1.9 Ejemplos en el PSoC Designer

Si se posee algún kit, este instala varios ejemplos que pueden accesarse rápidamente desde la
misma página de inicio. Además estos ejemplos son actualizados cada cierto tiempo por Cypress.
Programación en el PSoC Designer. Componente cy_boot

El componente cy_boot permite tener un mejor acceso a los recursos del chip, las funciones no son
parte de las librerías de componentes, pero pueden ser usadas por estas. Como usuario estas funciones
pueden ser llamadas para realizar ciertas funciones en el chip. Este componente es especial, a que es
incluido de forma automática en TODOS los proyectos, Solo puede existir una instancia de él, no tiene un
símbolo que lo represente, y no se encuentra presente en el catálogo.

Este componente provee definiciones y tipos de datos, para crear consistencia cuando se manejan
deferentes plataformas. Algunas de las más frecuentemente usadas son:

Tipos Base
Tipo Descripción
char8 8-bit (signed or unsigned, depending on the compiler selection for char)
uint8 8-bit unsigned
uint16 16-bit unsigned
uint32 32-bit unsigned
int8 8-bit signed
int16 16-bit signed
int32 32-bit signed
float32 32-bit float
float64 64-bit float
int64 64-bit signed
uint64 64-bit unsigned
Tipos Registro de Hardware
Definicion Descripción
reg8 Volatile 8-bit unsigned
reg16 Volatile 16-bit unsigned
reg32 Volatile 32-bit unsign
Definiciones Intrínsecas
Definicion Descripción
CY_NOP Processor NOP instruction

El Componente cy_boot, también define funciones para el manejo del sistema de reloj del PSoC,
para la generación de retardos.

CyDelay APIs

Las APIs de CyDelay implementan retardos simples basados en software. Los retardos compensan
la velocidad del reloj. Sin embargo, si la velocidad del reloj se cambia en tiempo de ejecución, es necesario
llamar a la función CDelayFreq(uint32 freq) para ajustar las funciones CyDelay(uint32 milliseconds),
CyDelayUs(uint16 microseconds) CyDelayCycles(uint32 cycles) al nuevo valor de reloj.

APIs del Reloj de Alta Frecuencia.

void CySysClkImoStart(void). Habilita el IMO. Para dispositivos PSoC 4200M esta función también habilita el
amarre con el WCO (watch Crystal Oscilator) si la opción "Trim with WCO" se encuentra seleccionada en el
dialogo de Configuración de relojes del Sistema.

void CySysClkImoStop(void). Deshabilita the IMO. Para dispositivos PSoC 4200M esta función también
deshabilita el amarre con el WCO (watch Crystal Oscilator) si la opción "Trim with WCO" se encuentra
seleccionada en el dialogo de Configuración de relojes del Sistema
For PSoC 4200L device families, this function will also enable the USB lock feature if selected in the
Design Wide Resources Clock Editor.
void CySysClkWriteHfclkDirect (uint32 clkSelect). Selecciona la fuente para el HFCLK. Sus parámetros
pueden ser:
CY_SYS_CLK_HFCLK_IMO IMO
CY_SYS_CLK_HFCLK_EXTCLK External clock pin
CY_SYS_CLK_HFCLK_ECO External crystal oscillator (solo para PSoC 4100 BLE y PSoC
4200 BLE).
CY_SYS_CLK_HFCLK_PLL0 PLL0 (solo para PSoC 4200L devices)
CY_SYS_CLK_HFCLK_PLL1 PLL1 (solo para PSoC 4200L devices)

void CySysClkWriteSysclkDiv (uint32 divider). Selecciona el preescalador para generar SYSCLK a partir
de HFCLK. Los Divisores son siempre potencias de 2. Sus Parametros pueden ser:
CY_SYS_CLK_SYSCLK_DIV1 1
CY_SYS_CLK_SYSCLK_DIV2 2
CY_SYS_CLK_SYSCLK_DIV4 4
CY_SYS_CLK_SYSCLK_DIV8 8
CY_SYS_CLK_SYSCLK_DIV16 16
CY_SYS_CLK_SYSCLK_DIV32 32
CY_SYS_CLK_SYSCLK_DIV64 64
CY_SYS_CLK_SYSCLK_DIV128 128

APIs De Manejo de Potencia.

void CSysPmSleep(void). Pone al PSoC en su estado dormido. En este estado el CPU es privado de su
reloj principal. Los periféricos continúan encendidos, por lo que puede ser despertado mediante de una
interrupción.

void CySysPmDeepSleep(void). Pone al PSoC en su estado de sueño profundo. En este modo solo algunos
de los periféricos se encuentran despiertos, por lo que solo una interrupción de estos lo puede despertar.

void CySysPmHibernate(void). Pone al PSoC en su estado de hibernación. Solo la SRAM los UDBs son
retenidos. La mayoría de las alimentaciones internas son apagadas. Solo es posible despertarlo mediante
los puertos o los comparadores de bajo consumo. Antes de llamar a esta función todas las celdas de
entrada/salida deben de haber sido congeladas usando la función CySysPmFreezelo(). Si se omite este
paso las celdas serán congeladas en su estado, pero lo perderán al despertarse.

Como el estado del CPU se pierde, este iniciara en el vector de reset. Para guardar el estado del
programa durante el modo de hibernación, su variable correspondiente deberá ser definida con el valor
CY_NOINIT. Esto evitara que los datos se inicialicen con cero al reiniciar. La interrupción que causa el
despertar del modo hibernación es retenida, por lo que puede ser leída por el firmware o causar una
interrupción una vez que estas sean habilitadas. Para Distinguir entre el despertar de hibernación y un
evento de reset, se puede usar la función CySysPmGetResetReason().

void CySysPmStop(void). Detiene al PSoC. Todas las alimentaciones internas son apagadas, y ningún
estado es retenido. Para despertar de este modo es necesario activar la entrada de despertar (P0.7 o P2.2
según el modelo) lo que ocasionará un reinicio. Para configurar la terminal de despertar, coloque el pin en
el esquemático y configúrelo como pull-up o pull-down de manera inversa a la polaridad de despertar. Por
default este pin es active-low, para cambiar la polaridad de despertar se usa la función
CySysPmWakeupPolarity(). Para Distinguir entre el despertar de Stop y un evento de reset, se puede usar
la función CySysPmGetResetReason(). Esta función congela las celdas de entrada/salida de manera
implícita. Las celdas permanecen congeladas después de reiniciar, hasta que sean explícitamente
descongeladas con la función CySysPmUnfreezelo().

void CySysPmSetWakeupPolarit(uint32 polarity). Para despertar del modo Stop, es necesario cambiar el
estado de la terminal despertar (P0.7), para reiniciar al dispositivo. Esta función asigna el nivel de activación
de esta terminal. Por defecto la polaridad es active-low, pero se puede modificar mediante los parámetros:
CY_PM_STOP_WAKEUP_ACTIVE_LOW y CY_PM_STOP_WAKEUP_ACTIVE_HIGH.

uint32 CySysPmGetResetReason(void). Retorna el motive del ultimo reset. Si se sale del modo Stop
mediante la terminal de reset externa, el reset será percibido como un reset general. Los Valores que puede
retornar son los siguientes:

CY_PM_RESET_REASON_UNKN. Motivo de Reset Desconocido.


CY_PM_RESET_REASON_XRES. Reset externo.
CY_PM_RESET_REASON_WAKEUP_HIB. Despertar de modo hibernación.
CY_PM_RESET_REASON_WAKEUP_STOP. Despertar de modo Stop.

APIs De Interrupciones.

Cy_boot provee APIs para el control de las interrupciones, estas son usadas en el componente
Interrupción del PSoC Designer, el cual es más sencillo de usar.

CyGlobalIntEnable. Esta macro permite la ejecución de interrupciones.

CyGlobalIntDisable. Esta Macro Evita la ejecución de interrupciones.

uint32 CyDisableInts(). Desabilita todas las interrupciones. Regresa la máscara de 32 bits de las
interrupciones anteriormente habilitadas.

void CyEnableInts(uint32 mask). Habilita todas las interrupciones especificadas en la máscara.

void CyIntEnable(uint8 number). Habilita la interrupción especificada (0-31)

void CyIntDisable(uint8 number). Desactiva la Interrupción especificada (0-31)

uint8 CyIntGetState(uint8 number). Lee el estado de una interrupción especificada (0-31). Regresa 1 si se
encuentra habilitada y 0 si no.

cyisraddress CyIntSetVector(uint8 number, cyisraddress address). Asigna un vector a una interrupción.


Regresa el vector anteriormente asignado a una interrupción.

cyisraddress CyIntGetVector(uint8 number). Obtiene el vector de una interrupción.

void CyIntSetPriority(uint8 number, uint8 priority). Especifica la prioridad de una interrupción. Los valores
validos de prioridad son 0-3.

uint8 CyIntGetPriority(uint8 number). Obtiene la prioridad de una interrupción

void CyIntSetPending(uint8 number). Forza la interrupción especificada a estar pendiente.

void CyIntClearPending(uint8 number). Limpia una interrupción pendiente.


APIs De Puertos.

El PSoC 4 usa tres diferentes registros para configurar y manipular sus puertos: los registros de
datos (CYREG_PRTx_DR), los registros de estado (CYREG_PRTx_PS) y los registros de configuración
(CYREG_PRTx_PC). Cy_boot nos proporciona funciones para la manipulación básica de estos registros.

CY_SYS_PINS_READ_PIN(portPS, pin). Lee el estado actual de un Pin.

CY_SYS_PINS_SET_PIN(portDR, pin). Escribe un valor alto en un Pin. Esta función solo afecta a aquellos
pines que no se encuentren conectados a hardware. La función no garantiza que el contenido del registro
no se corrompa durante una interrupción.

CY_SYS_PINS_CLEAR_PIN(portDR, pin). Escribe un valor bajo en un Pin. Esta función solo afecta a
aquellos pines que no se encuentren conectados a hardware. La función no garantiza que el contenido del
registro no se corrompa durante una interrupción.

CY_SYS_PINS_SET_DRIVE_MODE(portPC, pin, mode). Cambia el Drive de un Pin. La función no


garantiza que el contenido del registro no se corrompa durante una interrupción. Las constantes de modo
son las siguientes:

CY_SYS_PINS_DM_ALG_HIZ Analog HiZ


CY_SYS_PINS_DM_DIG_HIZ Digital HiZ
CY_SYS_PINS_DM_RES_UP Resistive pull up
CY_SYS_PINS_DM_RES_DWN Resistive pull down
CY_SYS_PINS_DM_OD_LO Open drain - drive low
CY_SYS_PINS_DM_OD_HI Open drain - drive high
CY_SYS_PINS_DM_STRONG Strong CMOS Output
CY_SYS_PINS_DM_RES_UPDWN Resistive pull up/down

CY_SYS_PINS_READ_DRIVE_MODE(portPC, pin). Lee el Drive de un Pin. Las constantes de modo son


las mismas que la función anterior.

Para evitar que las interrupciones puedan causar cambios inesperados en los registrs se puede usar
las funciones: CyEnterCriticalSection() y CyExitCriticalSection().

APIs Generales.

void CyHalt(uint8 reason). Detiene el CPU.

void CySoftwareReset(void). Forza un reinicio por Software.

void CyGetUniqueID(uint32* uniqueId). Obtiene la ID única de 64 bits del Dispositivo

Existen muchas más funciones definidas en cy_boot. Se pueden consultar en el documento de


referencia incluido en la carpeta de Manuales.

También podría gustarte