capítulo 19. módulo mssp

13
Capítulo 19.0 Módulo Maestro Puerto Serie Síncrono (MSSP) 19.1 Descripción del Módulo maestro SSP (MSSP) El módulo Maestro Puerto Serie Síncrono (MSSP) es una interfaz serial, útil para comunicar otros dispositivos periféricos o microcontroladores. Estos dispositivos pueden ser EEPROMs, registros de desplazamiento (shift register), controladores de display, convertidores A/D, etc. El módulo MSSP puede funcionar en uno de dos modos: Serial Peripheral Interface (SPI) (Interfaz Periférica Serial) Inter-Integrated Circuit ( 2 ) (Inter- Circuitos Integrados) Modo completamente maestro Modo esclavo (con llamada general de dirección) La interfaz 2 soporta los siguientes modos en hardware: Modo maestro Modo multi-maestro Modo esclavo 19.2 Registros de Control El módulo MSSP tiene asociados tres registros de control. Estos incluyen un registro de estado (status register) (SSPSTAT) y dos registros de control (SSPCON1 y SSPCON2). El uso de estos registros y su configuración individual de bits difieren significativamente dependiendo de si el módulo MSSP es operado en modo SPI o 2 . Los detalles adicionales son provistos de bajo de cada sección individual. 19.3 Modo SPI El modo SPI admite 8 bits de datos para ser transmitidos sincrónicamente y recibidos simultáneamente. Los cuatro modos del SPI son compatibles. Para lograr la comunicación, generalmente son usados tres pines: Serial Data Out (SDO) Serial Data In (SDI) Serial Clock (SCK) Además, un cuarto pin puede ser usado cuando este en operación un modo esclavo: Slave Select (!SS) La figura 19-1 muestra el diagrama de bloques del módulo MSSP cuando funciona en modo SPI.

Upload: alfredo-flores-vargas

Post on 21-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Capítulo 19. Módulo MSSP

Capítulo 19.0 Módulo Maestro

Puerto Serie Síncrono (MSSP)

19.1 Descripción del Módulo maestro

SSP (MSSP)

El módulo Maestro Puerto Serie Síncrono

(MSSP) es una interfaz serial, útil para

comunicar otros dispositivos periféricos o

microcontroladores. Estos dispositivos pueden

ser EEPROMs, registros de desplazamiento

(shift register), controladores de display,

convertidores A/D, etc.

El módulo MSSP puede funcionar en uno de

dos modos:

Serial Peripheral Interface (SPI)

(Interfaz Periférica Serial)

Inter-Integrated Circuit (𝐼2𝐶) (Inter-

Circuitos Integrados)

Modo completamente maestro

Modo esclavo (con llamada

general de dirección)

La interfaz 𝐼2𝐶 soporta los siguientes modos

en hardware:

Modo maestro

Modo multi-maestro

Modo esclavo

19.2 Registros de Control

El módulo MSSP tiene asociados tres registros

de control. Estos incluyen un registro de

estado (status register) (SSPSTAT) y dos

registros de control (SSPCON1 y SSPCON2).

El uso de estos registros y su configuración

individual de bits difieren significativamente

dependiendo de si el módulo MSSP es

operado en modo SPI o 𝐼2𝐶.

Los detalles adicionales son provistos de bajo

de cada sección individual.

19.3 Modo SPI

El modo SPI admite 8 bits de datos para ser

transmitidos sincrónicamente y recibidos

simultáneamente. Los cuatro modos del SPI

son compatibles. Para lograr la comunicación,

generalmente son usados tres pines:

Serial Data Out (SDO)

Serial Data In (SDI)

Serial Clock (SCK)

Además, un cuarto pin puede ser usado

cuando este en operación un modo esclavo:

Slave Select (!SS)

La figura 19-1 muestra el diagrama de bloques

del módulo MSSP cuando funciona en modo

SPI.

Page 2: Capítulo 19. Módulo MSSP

19.3.1 Registros

El módulo MSSP posee cuatro registros para

la operación del modo SPI. Estos son:

Registro de control MSSP1 (SSPCON1)

Registro de estado MSSP (SSPSTAT)

Registro serie recepción/transmisión de

memoria (Buffer) (SSPBUF)

Registro de desplazamiento MSSP

(SSPSR) No accesible directamente

SSPCON1 y SSPSTAT son los registros de

control y de estado en el modo de operación

SPI. El registro SSPCON1 es de lectura y

escritura. Los seis bits bajos de SSPSTAT son

de solo lectura. Los dos bits más altos de

SSPSTAT son lectura/escritura.

SSPRS es el registro de desplazamiento

usado para desplazar los datos dentro o fuera.

SSPBUF es el registro de la memoria

intermedia al que bytes de datos se escriben o

leen.

En las operaciones de recepción, SSPRS y

SSBUF juntos crean un receptor de doble

almacenamiento intermedio (Buffer). Cuando

SSPRS recibe un byte completo, este es

transferido a SSPBUF y la interrupción de

SSPIF es activada.

Durante la transmisión, el SSPBUF no es un

doble buffer. Una escritura de SSPBUF

escribirá tanto en SSPBUF como en SSPSR.

Bit 7 SMP: bit de muestro

SPI en modo maestro:

1 = los datos de entrada muestreados al final del tiempo de salida de datos

0 = los datos de entrada muestreados en medio del tiempo de salida de datos

SPI en modo esclavo:

SMP debe ser borrado cuando el SPI es usado en modo esclavo.

Bit 6 CKE: Bit de selección del reloj en SPI (*1)

1 = la transmisión ocurre en la transición del estado activo al estado inactivo del reloj

0 = la transmisión ocurre en la transición del estado inactivo al estado activo del reloj

Bit 5 D/!A: bit de Datos/!Dirección

Usados en el modo de 𝐼2𝐶 solamente

Page 3: Capítulo 19. Módulo MSSP

Bit 4 P: bit detener

Usados en el modo de 𝐼2𝐶 solamente. Este bit es borrado cuando el módulo MSSP es

deshabilitado, SSPEN es borrado.

Bit 3 S: bit iniciar

Usados en el modo de 𝐼2𝐶 solamente

Bit 2 R/!W: bit de leer/!escribir información

Usados en el modo de 𝐼2𝐶 solamente

Bit1 UA: Bit actualizador de dirección

Usados en el modo de 𝐼2𝐶 solamente

Bit 0 BF: bit de estado lleno de buffer (memoria) (en modo de recepción solamente)

1 = Recepción completa, SSPBUF está lleno.

0 = Recepción incompleta, SSPBUF está vacío

Nota 1:

La polaridad del estado del reloj es activada por el bit CKP (SSPCON1<4>).

Bit 7 WCOL: bit de detección de colisión de escritura (en modo de transmisión solamente)

SPI en modo maestro:

1 = El registro SSPBUF se escribe cuando todavía está transmitiendo la palabra anterior

(debe ser borrado en el software)

0 = No hay colisión

Bit 6 SSPOV: Bit indicador de recepción de desbordamiento (*1)

SPI en modo esclavo solamente:

Page 4: Capítulo 19. Módulo MSSP

1 = Un nuevo byte es recibido mientras el registro SSPBUF está resguardando un dato previo. En caso de desbordamiento, el dato en SSPSR se pierde. El desbordamiento

solo puede ocurrir en modo esclavo. El usuario debe leer el SSPBUF, incluso si solo se transmiten datos, para evitar la activación del desbordamiento (debe ser borrado por

software).

0 = No hay desbordamiento

Bit 5 SSPEN: bit para habilitar el Puerto Serial Síncrono Maestro

1 = Habilita el puerto serial y configura SCK, SDO, SDI y !SS como pines del puerto serial (*2)

0 = Deshabilita el puerto serial y configura estos pines como I/O

Bit 4 CKP: bit selector de polaridad del reloj

1 = Estado inactivo para el reloj es un nivel alto

0 = Estado inactivo para el reloj es un nivel bajo

Bit 3-0 SSPM3:SSPM0: bit selector del Modo Puerto Serial Síncrono Maestro

0101 = SPI en modo esclavo, clock= pin SCK, pin de control deshabilitado !SS, el pin !SS puede ser usado como pin de I/O (*3)

0100 = SPI en modo esclavo, clock= pin SCK, pin de control habilitado !SS (*3)

0011 = SPI en modo maestro, clock= TMR2 output/2 (*3-4)

0010 = SPI en modo maestro, clock= FOSC/64 (*3)

0001 = SPI en modo maestro, clock= FOSC/16 (*3)

0000 = SPI en modo maestro, clock= FOSC/4 (*3)

Nota

1: En el modo maestro, el bit de desbordamiento no se ha establecido, ya que cada

nueva recepción (y transmisión) es iniciado por escrito al registro SSPBUF.

2: Cuando están activados, estos pines deben estar correctamente configurados como

entradas o salidas.

3: Las combinaciones de bits no mencionados expresamente aquí son reservados o

implementados en modo I2C ™ solamente.

4: PR2 = 0x00 no se admite cuando se ejecuta el módulo SPI en modo TMR2 Output/2.

Page 5: Capítulo 19. Módulo MSSP

19.3.2 Operación

Cuando inicializamos el SPI, algunas opciones

necesitan estar especificadas. Esto se realiza

mediante la programación de los apropiados

bits de control SSPCON1 <5:00> y SSPSTAT

<7:06>). Estos bits de control permiten que se

especifique lo siguiente:

Modo maestro (SCK es el reloj de

salida)

Modo esclavo (SCK es el reloj de

entrada)

Polaridad del reloj/Clock Polarity (estado

inactivo de SCK)

Flanco de reloj (dato de salida en flanco

de subida/bajada de SCK)

Velocidad del reloj (Modo maestro

solamente)

Modo de Selector de Esclavo o !SS (en

modo esclavo solamente)

El módulo MSSP consiste en una transmisión

transmisor/receptor de registros (SSPSR) y un

registro de memoria (buffer) (SSPBUF). El

SSPSR desplaza los datos dentro y fuera de

un dispositivo, el MSB (Most Significative Bite

o Bit más Significativo) primero. El SSPBUF

contiene los datos que fueron escritos en el

SSPSR hasta que los datos recibidos están

listos. Una vez que se han recibido los ocho

bits de datos, el byte es movido al registro

SSPBUF. Entonces, el bit de detección de

memoria (buffer) llena, BF (SSPSTAT<0>) y el

bit de bandera de interrupción, SSPIF, son

activados. Esta doble memoria de recepción

de datos (SSPBUF) permite al siguiente byte

comenzar la recepción antes de leer los datos

que acaba de recibir. Cualquier escritura al

registro SSPBUF durante la

transmisión/recepción de datos será ignorada

y el bit de detección de colisión de escritura,

WCOL (SSPCON1<7>), será activado. El

software del usuario debe borrar el bit WCOL

de modo que se puede determinar si la

siguiente escritura(s) en el registro SSPBUF se

complete exitosamente.

El bit de Buffer lleno, BF (SSPSTAT<0>),

indica cuando SSPBUF ha sido cargado con

los datos recibidos (transmisión completa).

Cuando se lee el SSPBUF, el bit BF se borra.

Estos datos pueden ser irrelevantes si el SPI

es un transmisor. Generalmente, la

interrupción MSSP es usada para determinar

cuándo la transmisión/recepción ha sido

completada. Si el método de interrupción no se

va a utilizar, el software puede sondear para

garantizar que no se produce una colisión de

escritura. El ejemplo 19-1 muestra la carga del

SSPBUF (SSPSR) para los datos de

transmisión.

El SSPSR no es directamente legible o

escribible y solo se puede acceder abordando

el registro SSPBUF.

Además, el registro de estado MSSP

(SSPSTAT) indica las diversas condiciones de

estado.

Nota: Cuando el software de aplicación

está a la espera de recibir datos válidos,

el SSPBUF debe leerse antes de que el

siguiente byte de datos a transferir se

escriba en el SSPBUF. El software de

aplicación debe seguir este proceso

incluso cuando el contenido actual de

SSPBUF no sea importante.

Nota: El registro SSPBUF no puede ser usado

con las instrucciones leer-modificar-escribir,

tales como BCF, BTFSC y COMF.

Page 6: Capítulo 19. Módulo MSSP

Ejemplo 19-1: Cargando el Registro SSPBUF (SSPSR)

19.3.3 Habilitando I/O SPI

Para habilitar el puerto serial, el bit habilitador

del modo MSSP, SSPEN (SSPCON1<5>),

debe ser activado. Para restablecer o volver a

configurar el modo SPI, desactive el bit

SSPEN, reinicia el registro SSPCON y luego

activa el bit SSPEN. Este configura los pines

de SDI, SDO, SCK y !SS como pines del

puerto serie. Para que los pines se comporten

con la función del puerto serie, algunos de

ellos deben tener bits de datos de dirección (en

el registro TRIS) apropiadamente programado

de la siguiente manera:

SDI debe tener el bit TRISB<0>

activado (configurar como digital en

ADCON1) SDO debe tener el bit

TRISC<7> desactivado

SCK (modo maestro) debe tener el bit

TRISB<1> desactivado

SCK (modo esclavo) debe tener el bit

TRISB<1> activado (configurar como

digital en ADCON1)

SS debe tener el bit TRISA<5> activado

(configurar como digital en ADCON1)

Cualquier función del puerto serie que no se

desee puede ser remplazada mediante los

bits de datos de dirección correspondientes

(TRIS) del registro con el valor contrario. Las

funciones de entrada que no se van a utilizar

no necesitan ser configurados como entradas

o salidas digitales.

19.3.4 Ejemplo de conexión

La Figura 19-2 muestra la conexión típica entre

dos microcontroladores. El controlador

principal (Procesador 1) inicia la transferencia

mediante el envió de la señal de SCK. Los

datos se desplazan fuera de ambos registros

de desplazamiento sobre sus flancos de reloj

programados y asegurados sobre el flanco

opuesto del reloj. Ambos procesadores deben

programados a la misma polaridad del reloj

(CKP), a continuación, los dos controladores

deben enviar y recibir datos al mismo tiempo.

Si los datos son significativos (o datos de

prueba) dependerá del software de aplicación.

Esto conduce a tres escenarios para la

transmisión de datos:

Maestro envía datos – Esclavo envía

datos de prueba

Maestro envía datos – Esclavo envía

datos

Maestro envía datos de prueba –

Esclavo envía datos

Page 7: Capítulo 19. Módulo MSSP

19.3.5 Modo Maestro

El maestro puede inicializar la transferencia de

datos porque controla el SCK. El maestro

determina cuando el esclavo (Procesador 2,

Figura 19-2) transmitirá los datos por el control

del software.

En modo maestro, los datos son

transmitidos/recibidos tan pronto como se

escriben en el registro SSPBUF. Si el SPI sólo

va a recibir, la salida SDO puede ser

desactivado (programado como entrada). El

registro SSPSR seguirá desplazándose en la

señal en el pin SDI en la velocidad programada

para el reloj. A medida que cada byte es

recibido, será cargado en el registro SSPBUF

como si un byte como si se hubiera recibido un

byte normal (interrupciones y bits de estado

ajustados correctamente). Esto podría ser útil

en aplicaciones de recepción como un modo

“Monitor de Línea de Actividad”.

La polaridad del reloj se selecciona

adecuadamente programando el bit CKP

(SSPCON<4>). Este, entonces, daría forma de

onda para la comunicación SPI como se

muestra en la Figura 19-3, Figura 19-5 y la

Figura 19-6, donde el bit más significativo

(MSB) se transmite primero. En el modo

maestro, la velocidad del reloj SPI (bit de

velocidad) es programable por el usuario como

una delos siguientes sigue:

FOSC/4 (o Tcy)

FOSC/16 (o 4*Tcy)

FOSC/64 (o 16*Tcy)

TMR2 output/2

Esto permite una velocidad máxima del dato

(en 48MHz) de 12.00 Mbps. Cuando se utiliza

el modo en TMR2 output/2, el bit de velocidad

puede ser configurado utilizando el registro de

periodo PR2 y el prescaler del Timer 2. Sin

embargo, al escribir en SSPBUF no se borra el

valor actual del TMR2 en el hardware.

Dependiendo del valor actual del TMR2

cuando el firmware de usuario escriba a

SSPBUF, este puede resultar en un ancho de

bits MSB impredecible, a menos que se utilice

el procedimiento del ejemplo 19-2.

La figura 19-3 muestra las formas de onda

para el modo maestro. Cuando se activa el bit

CKE, los datos del SDO son válidos antes de

que haya un flanco del reloj sobre SCK. El

cambio en las muestras de entrada se

presenta basándose en el estado del bit SMP.

El momento en el que el SSPBUF se carga se

muestra con los datos recibidos.

Page 8: Capítulo 19. Módulo MSSP

Ejemplo 19-2: Cargando el Registro SSPBUF con el modo de reloj TMR2/2

Page 9: Capítulo 19. Módulo MSSP

19.3.6 Modo Esclavo

En el modo Esclavo, los datos se transmiten y

se reciben como los pulsos de reloj externos

que aparecen en SCK. Cuando el último bit se

retiene, se activa el bit de bandera de

interrupción SSPIF. En el modo esclavo, el

reloj externo es suministrado por la fuente de

reloj externa en el pin SCK. Este reloj externo

debe cumplir con los tiempos mínimos en alto

y bajo especificados en las especificaciones

eléctricas.

En el modo de espera (SLEEP), el esclavo

puede transmitir/recibir datos. Cuando se

recibe un byte, se puede configurar al

dispositivo para despertar del sueño.

19.3.7 Selección de Sincronización de

Esclavo

El pin SS permite sincronizar un modo esclavo.

El SPI debe estar en modo esclavo con el pin

de control SS habilitado

(SSPCON1<3:0>=04h). Cuando el pin SS esta

en bajo, la transmisión y la recepción son

habilitados y el pin SDO es impulsado. Cuando

el pin SS esta en alto, el pin SDO ya no es

accionado, incluso si esta en medio de la

transmisión de un byte y se convierte en una

salida flotante. Las resistencias externas pull-

up/pull-down pueden ser ideales dependiendo

de la aplicación.

Cuando se restablece el módulo SPI, el

contador de bits es forzado a ‘0’. Esto se

puede hacer por cualquier pin SS forzándolo a

un nivel alto o borrando el pin SSPEN. Para

emular la comunicación entre dos hilos, el pin

SDO puede ser conectado al pin SDI. Cuando

el SPI necesita operar con un receptor, el pin

SDO se puede configurar como entrada. Esto

deshabilita las transmisiones desde SDO. El

SDI siempre se puede dejar como una entrada

(función SDI) ya que no puede crear un

conflicto en el bus.

Nota: 1: Cuando el módulo SPI está en modo

esclavo con el pin de control SS activado

(SSPCON1<03:00>=0,100), el módulo SPI se restablecerá si el pin SS se activa en VDD.

2: Si el SPI se utiliza en modo esclavo con

CKE activado, el pin de control SS debe ser

habilitado.

Page 10: Capítulo 19. Módulo MSSP
Page 11: Capítulo 19. Módulo MSSP

19.3.8 Funcionamiento en modo

administrador de energía (Power-

Managed)

SPI en modo maestro, el módulo de reloj

puede estar operando a una velocidad

diferente que cuándo esta en modo de máxima

potencia (Full-Power); en el caso del modo

SLEEP, todos los relojes se detienen.

En la mayoría de los modos de reposo, se

proporciona un reloj para los periféricos. Ese

reloj debe venir de la fuente de reloj principal,

el reloj secundario (oscilador de Timer1) o la

fuente INTOSC. Consulte la sección 2.4

“Fuentes de reloj y oscilador de conmutación”

para obtener información adicional.

En la mayoría de los casos, la velocidad a la

que el maestro sincroniza los datos SPI no es

importante, sin embargo, este debe ser

evaluado para cada sistema.

Si la interrupción MSSP está habilitada, puede

activar el controlador desde el modo SLEEP o

uno de los modos de reposo cuando el

maestro termina el envío de datos, si no se

desea una salida del modo SLEEP, la

interrupción MSSP debe estar deshabilitada.

Si selecciona el modo de reposo (SLEEP)

todos los relojes del módulo estarán detenidos

y la transmisión/recepción permanecerá en ese

estado hasta que el dispositivo despierte.

Después de que el dispositivo regresa al modo

RUN, se reanudará el módulo de transmisión y

recepción de datos.

En modo esclavo SPI, el SPI transmite/recibe

registro de desplazamiento funcionando de

forma síncrona con el dispositivo. Esto permite

al dispositivo estar ubicado en cualquier modo

de administración de energía (Power-

Managed) y los datos a ser movidos en el SPI

transmitiendo/recibiendo registros de

desplazamiento. Cuando los ocho bits han sido

recibidos, se activará el bit indicador de

interrupción MSSP y si se activa, despertará el

dispositivo.

19.3.9 Efectos de un Reset

Un reset deshabilita el módulo MSSP y termina

la corriente de transferencia.

19.3.10 Compatibilidad del modo BUS

La Tabla 19-1 muestra la compatibilidad ente

el modo SPI estándar y los estados de los bits

de control CKP y CKE.

Hay también un bit SMP que controla cuando

los datos son muestreados.

Page 12: Capítulo 19. Módulo MSSP

Leyenda: - = no implementado, leído como '0'. Las celdas sombreadas no son utilizadas por el MSSP en

modo SPI.

Nota 1: Estos bits no están implementadas en los dispositivos de 28 pines, siempre mantienen estos bits

borrados.

2: RA6 está configurado como un pin del puerto en base a varios modos de oscilador principal. Cuando el pin

del puerto se desactiva, todos los bits asociados leen '0'.

Page 13: Capítulo 19. Módulo MSSP