Post on 04-Mar-2015
dsPIC. Arquitectura
Dispositivos Lógicos ProgramablesIngeniero de Telecomunicación
Arquitectura
� Arquitectura Harvard� Datos de 16 bits� Instrucciones de 24 bits� PC de 24 bits� Capacidad para ejecutar instrucciones
de 3 operandos en un ciclo: ej. A+B=C� Instrucciones de dos tipos: MCU y DSP
Arquitectura
� Dos bancos X e Y� Memoria programa� Memoria EEPROM� Motor DSP� 16 Registros W� Periféricos� Watchdog ….
Registros básicos
Registros W
� Mapeados en memoria� W15, puntero de pila. RESET = 0x0800� W0…W3 tienen shadow (PUSH.S y
POP.S)� W14 permite definir un “stack frame
pointer”
Memoria de programa
Memoria de programa
� Se puede leer/escribir en la memoria de programa:� TBLRDL: Leer parte baja� TBLRDH: Leer parte alta� TBLWTL: Escribir parte baja� TBLTH: Escribir parte alta
Memoria de datos
Memoria de datos
� SFR: Special Function Registers� Útil a partir de 0x800� La parte inferior puede mapearse como
memoria de programa� Las instrucciones tipo DSP “ven” un
mapeo diferente
Memoria datos. Instrucciones DSC-MAC
Memoria de datos: SFR básicos
Memoria de datos: SFR básicos
Memoria datos: modos de direccionamiento
� Directo a memoria� Directo a registro� Indirecto sobre registro
� Con pre-incremento o pre-decremento� Con post-incremento o post-decremento� Con offset de registro (sólo en algunas instr.)
MOV [W1 + W2], [W3++]� Con offset de literal (sólo en algunas instr.)
MOV [W1 + #0x020], [W3++]� Inmediato
Modos direccionamiento. Ejemplo
Direccionamiento de datos en memoria de programa
� A través del registro PSV� A través de la instrucciones TABLE
Direccionamiento circular
� XMODSRT, YMODSRT� Contienen la dirección de inicio de los buffers
� XMODEND, YMODEND� Contienen la dirección de fin de los buffers
� MODCON� Indica el W (para X e Y) sobre el que se realiza
el direccionamiento circular
Direccionamiento con inversión de bit
� MODCOM, � BWM para seleccionar el W que se usa como puntero
para el buffer� XBREV:
� BREN, para habilitar el direccionamiento� XB define el tamaño del buffer
Direccionamiento con inversión de bit
Oscilador
� Oscilador primario externo
� Oscilador secundario a 32 kHz
� Oscilador interno RC de 8 MHz
� Oscilador interno LPRC de 512 kHz
Oscilador
� Se configura en el registro FOSC
� En general el EC o el XT
� Input 4-10MHz� Output 120 MHz
máx. con PLL� El PLL permite
multiplicar la frecuencia
Oscilador
XT, HS EC
Oscilador (registros)FSOC OSCON
Oscilador
Ciclo de instrucción
I/O Ports
� Registros� TRISx:
“1” input, “0” output� PORTx: Lectura o
escrita en el puerto� LATx:
Para escribir=PORTx; Para leer, lee la entrada a los latches
Reset
� POR: Power on Reset� EXTR: Reset externo por el pin MCLR� SWR: Instrucción de reset� BOR: Brown-out reset� WDTR: Reset por watchdog� TRAPR: Cuando existen múltiples trap
simultáneas� UWR: cuando de utiliza un registro W sin
inicializar como puntero� El registro RCON indica la causa del RESET
Temporizadores
� Varios temporizadores de 16 bits� Registros asociados:
� TMRx: Contador de 16 bits� PRx: Período de 16 bits� TxCON: Registro de control
� Bits de interrupción asociados:� TxIE: Habilitación de interrupción� TxIF: Flag de interrupción� TxIP <2:0>: Prioridad de la interrupción
� Tres variantes: A, B y C� Algunos se pueden encadenar y formar 32 bits
Temporizadores
� Tipo A� Puede funcionar con el oscilador de bajo consumo de 32kHz� Puede funcionar de forma asíncrona con un reloj externo� El Timer 1 es de tipo A
� Tipo B� Se puede encadenar con uno de tipo C y formar 32 bits� La sincronización de reloj se produce después del prescalado� El Timer 2 y el 4 suelen ser de tipo B
� Tipo C� Se puede encadenar con uno de tipo B� Al menos un temporizador de tipo C puede disparar una conversión
A/D� El Timer 3 y el 5 suelen ser de tipo C
Temporizadores (tipo A, TxCON)
Interrupciones
� 8 interrupciones tipo trap no enmascarables
� 54 vectores de interrupción
� Tabla alternativa (AIVT) se selecciona en registro ALTIVT
Interrupciones
� Cada interrupción salta a una posición
� Registros asociados� INTCON1,
INTCON2� IFSx� IECx� IPCx� SR� CORCON
Interrupciones: INTCON1
� NSTDIS: 1 deshabiltadas las anidadas0 habilitadas (por defecto)
� El resto asociadas con los conflictos TRAP
Interrupciones: INTCON2
� ALTIVT: 1 tabla de vectores alternativa, 0 standard� DISI: permite deshabilitar interrupciones� INTxEP: Interrupciones externas
� 1 en el flanco negativo� 0 en el positivo
Interrupciones: IFSx (Flags)
� ADIF: Fin conversión A/D
� TxIF: Temporizador x
� INTxIF: Interrupción externa 0
� INTxIF: Inputcapture canal x
� OCxIF: Outpucaputure
Interrupciones: IECx, habilitar int.
Interrupciones: prioridad CPU
� La prioridad de la CPU se indica con IPL0..3 (registros SR+CORCON)
� Para deshabilitar las interrupciones usuario IPL2..0=111 (prioridad 7 CPU)
Interrupciones: prioridad
� Registros IPC0..IPC11� P.e. T1IP, en IPC0 fija la prioridad de Timer 1� Por defecto la prioridad es 4� Prioridad 0 equivale a deshabiltarla
Interrupciones
1. Poner a 1 NSTDIS si no anidadas2. Seleccionar la prioridad en IPCx3. Borrar el flag en IFSx4. Habilitar la interrupciones en IECx