Está en la página 1de 28

Significado de InitSysCtrl() en el programa Code Composer

ChatGPT
InitSysCtrl() es una función que se utiliza en el programa Code Composer Studio (CCS), que es

un entorno integrado de desarrollo de software (IDE) utilizado para programar

microcontroladores y otros dispositivos embebidos.

La función InitSysCtrl() se utiliza para inicializar el sistema de control del microcontrolador. Esto

incluye la configuración de la velocidad del reloj del sistema, la configuración de las

interrupciones del sistema, la configuración de los modos de ahorro de energía y otras

configuraciones importantes del sistema.

La función InitSysCtrl() es una parte fundamental del programa CCS y se utiliza en la mayoría de

los proyectos que implican la programación de microcontroladores. Es una función que se llama

al principio del programa y es esencial para garantizar que el microcontrolador se configure

correctamente antes de que se ejecuten otras partes del programa.

En resumen, InitSysCtrl() es una función clave en el proceso de programación de

microcontroladores que permite la configuración adecuada del sistema de control del dispositivo

embebido.

Que significa el comando asm()


ChatGPT
El comando asm() es una función en lenguaje C que se utiliza para incluir código escrito en

lenguaje ensamblado o directamente en un programa en C. El comando asm() le permite al


programador insertar instrucciones de ensamblado dentro del código en C, lo que puede ser util

en situaciones donde se necesita optimizar el rendimiento de una parte del programa especifico

o cuando se requiere acceso directo al hardware del sistema.

El comando asm() generalmente se utiliza para escribir código en ensamblador para funciones

específicas del microcontrolador, como configuración de pines GPIO, configuración de registros

de temporizador y controladores de interrupciones, entre otras.


La sintaxis básica del comando asm() es la siguiente:

C
Copiar código
asm("assembly code");

Dentro de los paréntesis del comando asm(), se coloca el código en lenguaje ensamblado. La

cadena de texto que se coloca dentro de las comillas debe seguir las convenciones de sintaxis

de ensamblar correspondientes al microcontrolador en el que se está trabajando.

Es importante tener en cuenta que el uso del comando asm() puede tener algunas desventajas,

como hacer que el código sea menos portátil y más difícil de mantener. Por lo tanto, se

recomienda utilizarlo con moderación y solo en situaciones en las que se requiere acceso

directo al hardware o se necesita optimizar el rendimiento de una parte específica del programa.

asm("NOP")
ChatGPT
El código "asm("NOP")" es una instrucción en lenguaje ensamblado que se utiliza para insertar

una operación de "No operación" (NOP) en el código del programa. La instrucción NOP no
realiza ninguna operación y se utiliza en programación de bajo nivel para agregar un retraso en

la ejecución del programa, mantener una secuencia de temporización precisa o simplemente

llenar un espacio vacío en el código.

En el código C, la instrucción "asm("NOP")" se utiliza con la función asm() para insertar esta

instrucción directamente en el código de C. Un ejemplo de su uso sería:

C
Copiar código
asm("NOP");

Esta instrucción se traduciría a la instrucción NOP correspondiente en lenguaje ensamblado y se

ejecutaría en el procesador durante la ejecución del programa.


Es importante tener en cuenta que el uso excesivo de NOP en el código puede tener un impacto

negativo en el rendimiento del programa, ya que puede ralentizar la ejecución del mismo. Por lo
tanto, se recomienda utilizar los NOP con moderación y solo en situaciones específicas donde

sean necesarios.

GpioCtrolRegs.GPAPUD.bit.GPIO31 = 0
ChatGPT
La línea de código "GpioCtrolRegs.GPAPUD.bit.GPIO31 = 0" se utiliza para desactivar la

resistencia de pull-up o pull-down de un pin GPIO específico en un microcontrolador.

En este caso, la instrucción se refiere al registro de control GPIO A (GPACtrlRegs) ya la

configuración del pin GPIO 31 (GPIO31). Al establecer el bit GPIO31 en GPAPUD en 0, se

desactiva la resistencia pull-up o pull-down en el pin GPIO31.

Es importante tener en cuenta que la activación o desactivación de las resistencias pull-up o

pull-down en los pines GPIO depende de la configuración específica del hardware y del circuito

al que se conecta el microcontrolador. Por lo tanto, es necesario tener cuidado al manipular

estas configuraciones y es recomendable seguir las especificaciones del fabricante del

microcontrolador y del circuito para evitar daños o comportamientos inesperados.

2/2
Todos los pines GPIO tienen para activar y desactivar resistencia pull up o pull down ?
ChatGPT
En general, no todos los pines GPIO tienen la capacidad de activar o desactivar una resistencia

pull-up o pull-down. La capacidad de activar o desactivar estas resistencias en los pines GPIO

depende del diseño específico del microcontrolador y del circuito al que está conectado.
En algunos microcontroladores, todos los pines GPIO tienen la capacidad de activar o desactivar

una resistencia pull-up o pull-down a través de registros de configuración específicos. Sin


embargo, en otros microcontroladores, solo un subconjunto de pines GPIO tienen esta

capacidad.

Además, la activación o desactivación de las resistencias pull-up o pull-down puede estar


limitada por la cantidad de corriente que el microcontrolador puede suministrar a través de estas

resistencias. En algunos casos, el fabricante del microcontrolador puede recomendar el uso de

resistencias externas en el lugar de las internas del microcontrolador para asegurar el

funcionamiento correcto del circuito.

Por lo tanto, es importante revisar las especificaciones del fabricante del microcontrolador y del

circuito para determinar si un pin GPIO específico tiene la capacidad de activar o desactivar una

resistencia pull-up o pull-down y si es necesario usar resistencias externas en el circuito.

Para que serviria que tenga resistencia de oll up y pull down ?


ChatGPT
Las resistencias pull-up y pull-down se utilizan en circuitos digitales para garantizar que un pin

GPIO tenga un valor lógico definido en ausencia de una entrada de señal externa.

Cuando un pin GPIO no está conectado a nada, puede flotar y mostrar valores indefinidos o

aleatorios, lo que puede llevar a comportamientos impredecibles en el circuito. Las resistencias

pull-up o pull-down se utilizan para prevenir este problema y asegurar que el pin GPIO tenga un

valor lógico definido en todo momento.

La resistencia pull-up se conecta desde el pin GPIO hasta un nivel de voltaje alto (generalmente

la fuente de alimentación del circuito) y la resistencia pull-down se conecta desde el pin GPIO

hasta un nivel de voltaje bajo (generalmente el suelo o tierra del circuito). Cuando se activa la

resistencia pull-up, el pin GPIO se mantiene en un estado lógico alto en ausencia de una

entrada de señal externa, y cuando se activa la resistencia pull-down, el pin GPIO se mantiene

en un estado lógico bajo en ausencia de una entrada de señal externa.


La elección de utilizar una resistencia pull-up o pull-down depende de la configuración específica

del circuito y del microcontrolador. En algunos casos, puede ser necesario utilizar resistencias
externas para garantizar la correcta operación del circuito, especialmente en circuitos de alta

velocidad o con requisitos específicos de tiempo de respuesta.

GoioDataRegs.GPACLEAR.bit.GPIO = 1
ChatGPT
La línea de código "GpioDataRegs.GPACLEAR.bit.GPIO = 1" se utiliza para borrar o limpiar el

valor de un pin GPIO específico en un microcontrolador.

En este caso, la instrucción se refiere al registro de datos GPIO A (GPADataRegs) y al pin GPIO

en el que se establece el bit GPIO en 1. Al establecer el bit GPIO en 1 en el registro

GPACLEAR, se limpia o borra el valor del pin GPIO correspondiente.

Es importante tener en cuenta que la configuración específica de los registros de control y datos

GPIO depende del diseño del microcontrolador y del circuito al que está conectado. Por lo tanto,

es necesario revisar las especificaciones del fabricante del microcontrolador y del circuito para

determinar cómo se deben configurar los registros GPIO para el correcto funcionamiento del

circuito.

GpioDataRegs.bit.GPDAT.GPIO31 = 1
ChatGPT
La línea de código "GpioDataRegs.bit.GPDAT.GPIO31 = 1" se utiliza para establecer el valor de

un pin GPIO específico en un microcontrolador.


En este caso, la instrucción se refiere al registro de datos GPIO D (GPDDataRegs) y al pin GPIO

31 (GPIO31). Al establecer el bit GPIO31 en el registro GPDAT en 1, se establece el valor del

pin GPIO31 en 1.

Es importante tener en cuenta que la configuración específica de los registros de control y datos

GPIO depende del diseño del microcontrolador y del circuito al que está conectado. Por lo tanto,
es necesario revisar las especificaciones del fabricante del microcontrolador y del circuito para

determinar cómo se deben configurar los registros GPIO para el correcto funcionamiento del

circuito.

Además, es importante tener cuidado al manipular los valores de los pines GPIO, ya que los

valores incorrectos pueden provocar comportamientos inesperados en el circuito y posiblemente

dañar los componentes del circuito.

GpioCtrolRegs.GPAMUX2.bit.GPIO31 = 0
ChatGPT
La línea de código "GpioCtrolRegs.GPAMUX2.bit.GPIO31 = 0" se utiliza para configurar el modo

de operación de un pin GPIO específico en un microcontrolador.

En este caso, la instrucción se refiere al registro de control GPIO A (GPACtrlRegs) y al pin GPIO

31 (GPIO31). El registro GPAMUX2 controla el modo de funcionamiento de los pines GPIO 16 a

31, y el bit GPIO31 del registro GPAMUX2 se establece en 0 para configurar el pin GPIO31 en

modo GPIO.

En algunos microcontroladores, los pines GPIO pueden tener varias funciones, como entrada de

corriente, entrada/salida digital, entrada de interrupción, etc. El registro GPAMUX2 (o similar) se

utiliza para seleccionar la función deseada para cada pin GPIO.

Es importante tener en cuenta que la configuración específica de los registros de control y datos
GPIO depende del diseño del microcontrolador y del circuito al que está conectado. Por lo tanto,

es necesario revisar las especificaciones del fabricante del microcontrolador y del circuito para
determinar cómo se deben configurar los registros GPIO para el correcto funcionamiento del

circuito.

GpioCtrolRegs.GPADIR.bit.GPIO31 = 1
ChatGPT
La línea de código "GpioCtrolRegs.GPADIR.bit.GPIO31 = 1" se utiliza para configurar la

dirección de un pin GPIO específico en un microcontrolador.

En este caso, la instrucción se refiere al registro de control GPIO A (GPACtrlRegs) y al pin GPIO

31 (GPIO31). El registro GPADIR se utiliza para configurar la dirección de los pines GPIO como

entrada (valor 0) o salida (valor 1). Al establecer el bit GPIO31 del registro GPADIR en 1, se

configura el pin GPIO31 como una salida.

Es importante tener en cuenta que la configuración específica de los registros de control y datos

GPIO depende del diseño del microcontrolador y del circuito al que está conectado. Por lo tanto,

es necesario revisar las especificaciones del fabricante del microcontrolador y del circuito para

determinar cómo se deben configurar los registros GPIO para el correcto funcionamiento del

circuito.

Además, es importante tener cuidado al manipular los valores de los pines GPIO, ya que los

valores incorrectos pueden provocar comportamientos inesperados en el circuito y posiblemente

dañar los componentes del circuito.

EALLOW y EDIS
ChatGPT
"EALLOW" y "EDIS" son palabras clave en el lenguaje de programación C utilizado en algunos

microcontroladores de Texas Instruments, como el TMS320F2802x, para habilitar y deshabilitar

el acceso a ciertas áreas de memoria y registros de control.

"EALLOW" significa "Enable Access" y habilita el acceso a ciertas áreas de memoria y registros

de control que normalmente están protegidos contra escritura y/o lectura. Esta instrucción se
utiliza para permitir que el programa de usuario acceda a áreas de memoria y registros que

normalmente solo pueden ser modificados por el firmware del microcontrolador.

"EDIS" significa "Disable Access" y deshabilita el acceso a las áreas de memoria y registros que

se habilitan previamente con la instrucción "EALLOW". Esta instrucción se utiliza para proteger

las áreas de memoria y registros de escritura y/o lectura no autorizada.

Es importante tener en cuenta que la habilitación y deshabilitación del acceso a las áreas de

memoria y registros deben realizarse con precaución y solo cuando sea necesario, ya que un

acceso incorrecto a estas áreas puede causar daños en el hardware del microcontrolador.

Además, es necesario revisar las especificaciones del fabricante del microcontrolador y del
circuito para determinar qué áreas de memoria y registros están protegidos y correctamente

están disponibles para su acceso por parte del programa de usuario.

que significa cada instrucción del código en code composer #include "DSP28x_Project.h"
__interrupt void RTC(void); flotante Ts = 0,5; carácter x = 0; vacío principal (vacío) { InitSysCtrl
(); FUERZA DE; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); PERMITIR;
PieVectTable.TINT0 = &RTC; EDIS; InitCpuTimers(); ConfigCpuTimer(&CpuTimer0, 150, (largo
sin firmar)(Ts*1000000)); CpuTimer0Regs.TCR.todo = 0x4000; IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; EINT; ERTM; while(1){asm("NOP"); } } __interrupt void
RTC(void){ CpuTimer0.InterruptCount++; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; x = x+1;
si(x>=256){ x = 0; } }
ChatGPT
2/2
El código en Code Composer es un programa para un microcontrolador de la familia

TMS320F28xx de Texas Instruments. A continuación se describe el significado de cada

instrucción del programa:


#include "DSP28x_Project.h"

La instrucción #include incluye el archivo de encabezado "DSP28x_Project.h", que contiene las

definiciones de los registros y periféricos del microcontrolador.

__interrupt void RTC(void);

Esta instrucción define la función de interrupción RTC, que se ejecutará cuando se produzca

una interrupción del temporizador RTC.

float Ts = 0.5;

Esta instrucción define una variable de tipo float llamada Ts con un valor inicial de 0.5.

char x = 0;

Esta instrucción define una variable de tipo char llamada x con un valor inicial de cero.

void main(void)

Esta instrucción define la función principal del programa.

scs
Copiar código
InitSysCtrl(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable();

Estas instrucciones inician el sistema, deshabilitan las interrupciones globales, inicializan el


controlador de interrupciones (PIE), desactivan todas las interrupciones, inicializan la tabla de

vectores de interrupción y habilitan el acceso a las tablas de vectores de interrupción.

php
Copiar código
EALLOW; PieVectTable.TINT0 = &RTC; EDIS;

Estas instrucciones habilitan el acceso a las tablas de vectores de interrupción, asignan la

función de interrupción RTC a la interrupción del temporizador TINT0 y deshabilitan el acceso a

las tablas de vectores de interrupción.

scs
Copiar código
InitCpuTimers(); ConfigCpuTimer(&CpuTimer0, 150, (unsigned long)(Ts*1000000)); CpuTimer0Regs.TCR.all =
0x4000; IER |= M_INT1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1; EINT; ERTM;

Estas instrucciones inicializan el temporizador de CPU, configuran el temporizador CpuTimer0


con un valor de cuenta de 150 y un período de Ts segundos, inician el temporizador CpuTimer0,

habilitan la interrupción INT1 y habilitan la interrupción INTx7 en el controlador de interrupciones

(PIE).

scs
Copiar código
while(1){ asm(" NOP"); }

Este es un bucle infinito que no hace nada, excepto ejecutar la instrucción NOP (No Operation).

javascript
Copiar código
__interrupt void RTC(void){ CpuTimer0.InterruptCount++; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; x = x+1;
if(x>=256){ x = 0; } }

Esta es la función de interrupción RTC que se ejecuta cuando se produce una interrupción del
temporizador TINT0. La función incrementa el contador de interrupciones del temporizador

CpuTimer0, borra la bandera de interrupción correspondiente en el controlador de interrupciones

(PIE), incrementa la variable xy si x es mayor o igual a 256, la reinicia en cero.

CpuTimer0.InterruptCount++;
ChatGPT
La instrucción "CpuTimer0.InterruptCount++;" incrementa en 1 el valor de la variable

InterruptCount de la estructura CpuTimer0 en cada interrupción del temporizador 0 del CPU. En

este caso, la función RTC() se ejecutará cada vez que se cumpla el período del temporizador 0,

y en cada ejecución de la función, se incrementará en 1 el valor de InterruptCount.


PieCtrlRegs.PIEACK.all = PIEACK_GROUP1
ChatGPT
La instrucción "PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;" es utilizado para reconocer y

limpiar una interrupción específica. En este caso, se está reconociendo la interrupción del Grupo

1 (o el Vector Table Interrupt), que es la que está asociada a la interrupción del temporizador 0

que se configura en la función principal.

Cuando ocurre una interrupción en el microcontrolador, se almacena el número del vector

llamado de interrupción en un registro PIEACK (PIE Acknowledge), y luego se limpia el flag de

interrupción en el registro correspondiente para evitar que la misma interrupción se vuelva a

disparar.

En este caso, la instrucción "PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;" establece el número

del vector de interrupción del Grupo 1 en el registro PIEACK, lo que indica al microcontrolador

que la interrupción se ha reconocido. Luego, se limpia el flag de interrupción en el registro

correspondiente (en este caso, en el registro del timer 0) con la instrucción

"PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;".

#incluye "DSP28x_Project.h" #incluye "UART.h" #incluye "ADC.h" #incluye "PWM.h" __interrupt


void RTC(void); flotante Ts = 0,5; char byte_recibido = 0; corto sin signo uint16_adc = 0; tensión
de flotación = 0,0; vacío principal (vacío) { InitSysCtrl (); InitSciaGpio(); InitECapGpio(); FUERZA
DE; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); PERMITIR;
SysCtrlRegs.HISPCP.all = 3; EDIS; InitAdc(); AdcRegs.ADCTRL1.all = 0; ADC_clk_config();
ADC_mode_config(); ADC_selección_canal(); PWM_config(); ECap1Regs.CAP2 = 0; EALLOW
GpioCtrlRegs.GPAPUD.bit.GPIO0=0; GpioDataRegs.GPACLEAR.bit.GPIO0=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO0=0; GpioCtrlRegs.GPADIR.bit.GPIO0=1;
GpioCtrlRegs.GPAPUD.bit.GPIO1=0; GpioDataRegs.GPACLEAR.bit. GPIO1=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO1=0; GpioCtrlRegs.GPADIR.bit.GPIO1=1;
GpioCtrlRegs.GPAPUD.bit.GPIO2=0; GpioDataRegs.GPACLEAR.bit.GPIO2=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO2=0; GpioCtrlRegs.GPADIR.bit.GPIO2=1;
GpioCtrlRegs.GPAPUD.bit.GPIO3=0; GpioDataRegs.GPACLEAR.bit.GPIO3=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO3=0; GpioCtrlRegs.GPADIR.bit.GPIO3=1; EDIS;
UART_FIFO_config(); UART_config(); UART_BAUD_RATE(); SciaRegs.SCICTL1.bit.SWRESET
= 1; hacer{ while(SciaRegs.SCIFFRX.bit.RXFFST == 0); byte_received =
SciaRegs.SCIRXBUF.bit.RXDT; } while(byte_recibido!= '5'); SciaRegs.SCITXBUF =
byte_recibido; PERMITIR; PieVectTable.TINT0 = &RTC; EDIS; InitCpuTimers();
ConfigCpuTimer(&CpuTimer0, 150, (largo sin firmar)(Ts*1000000)); CpuTimer0Regs.TCR.todo =
0x4000; IER |= M_INT1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1; EINT; ERTM; while(1){asm("NOP");
} } __interrupt void RTC(void){ CpuTimer0.InterruptCount++; PieCtrlRegs.PIEACK.all =
PIEACK_GROUP1; AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; AdcRegs.ADCTRL2.bit.SOC_SEQ1
= 1; while(AdcRegs.ADCST.bit.SEQ1_BSY == 1); uint16_adc = AdcMirror.ADCRESULT0;
voltaje = ((float)uint16_adc/4096.0)*3.0; SciaRegs.SCITXBUF = uint16_adc;
SciaRegs.SCITXBUF = (uint16_adc & 0xff00)>>8; SciaRegs.SCITXBUF =
GpioDataRegs.GPADAT.bit.GPIO2 + (GpioDataRegs.GPADAT.bit.GPIO3<<1);
while(SciaRegs.SCIFFRX.bit.RXFFST == 0); byte_received = SciaRegs.SCIRXBUF.bit.RXDT;
while(SciaRegs.SCIFFRX.bit.RXFFST == 0); ECap1Regs.CAP2 = (SciaRegs.SCIRXBUF.bit.
RXDT<<8) + byte_recibido; while(SciaRegs.SCIFFRX.bit.RXFFST == 0); byte_received =
SciaRegs.SCIRXBUF.bit.RXDT; GpioDataRegs.GPADAT.all = (GpioDataRegs.GPADAT.all &
0xfffffffc) + byte_received; }
ChatGPT
Este es un código de ejemplo escrito en C para un microcontrolador que incluye un ADC, un

PWM, un UART y un temporizador.

El código comienza con las declaraciones include necesarias para el microcontrolador específico

y para los diferentes periféricos utilizados en el código. Luego, se definen las variables globales,

incluido el tiempo de muestreo para la interrupción del temporizador, una variable para

almacenar el byte recibido a través de UART y dos variables para las mediciones de ADC.

La función principal comienza con la inicialización del control del sistema y los pines GPIO para

UART y ECap, desactivación de interrupciones e inicialización de la tabla de interrupciones.

Luego, se configuran el ADC y el PWM, y se inicializan los pines GPIO para las salidas. A

continuación, se configuran el UART FIFO y la velocidad en baudios, y se inicia la comunicación

esperando a que se reciba un byte específico (en este caso, el byte '5').

A continuación se define la función de interrupción RTC, que se ejecuta cada vez que se
produce la interrupción del temporizador. Esta función incrementa el contador de interrupciones,

restablece e inicia la secuencia de conversión de ADC, espera a que termine la secuencia y


calcula el voltaje a partir de la medición de ADC. Luego, envía la medida de ADC a través de

UART, lee dos bytes de UART para establecer el valor de ECap2 y lee un byte de UART para

establecer el valor de los pines GPIO de salida.


Finalmente, la función principal entra en un ciclo infinito mientras espera que ocurran las

interrupciones.

InitPieCtrl();
ChatGPT
4/4
La función InitPieCtrl()se utiliza para inicializar el controlador PIE (expansión de interrupción

periférica). El controlador PIE se utiliza para gestionar las diversas interrupciones generadas por

los diferentes periféricos del sistema.

En el fragmento de código proporcionado, InitPieCtrl()se llama para inicializar el controlador

PIE. La función establece los registros de control PIE a sus valores predeterminados y desactiva

todas las interrupciones al borrar los registros PIEIER. También habilita el módulo PIE

configurando el registro PIECTRL.

Después de inicializar el controlador PIE, las interrupciones se pueden habilitar para periféricos

específicos usando los registros PIEIER y las entradas de la tabla de vectores PIE

correspondientes se pueden configurar usando PieVectTable.

IER = 0x0000;
ChatGPT
Esta línea establece el registro de habilitación de interrupciones (IER) en 0x0000, lo que

desactiva todas las interrupciones en el sistema. Esto generalmente se hace al principio del
código para garantizar que las interrupciones estén deshabilitadas hasta que se habiliten

explícitamente más adelante.


IFR = 0x0000;
ChatGPT
2/2
El IFRregistro (Registro de indicadores de interrupción) se utiliza para indicar qué eventos de

interrupción se han producido. Escribir un 1 en cualquier bit del IFRregistro borra el indicador de

interrupción correspondiente.

Por lo tanto, la escritura IFR = 0x0000borra todas las banderas de interrupción.

InitPieVectTable();
ChatGPT
2/2
La función InitPieVectTable()se usa para inicializar la tabla de vectores PIE, que se usa para

asignar las rutinas de servicio de interrupción (ISR) a los eventos de interrupción apropiados. La

tabla de vectores PIE es una tabla de consulta que asigna vectores de interrupción a las

direcciones ISR correspondientes. Cada fuente de interrupción tiene un número de vector único

asociado, y el vector correspondiente en la tabla contiene la dirección del ISR que da servicio a

esa fuente de interrupción.

En la InitPieVectTable()función, cada entrada en la tabla de vectores se inicializa con un valor

predeterminado que apunta a un ISR ficticio. Este ISR ficticio es simplemente un ciclo infinito
que no hace nada, y se usa para capturar cualquier evento de interrupción que pueda ocurrir

antes de que el programador haya tenido la oportunidad de configurar correctamente las rutinas

del servicio de interrupción.

En general, es una buena práctica inicializar la tabla de vectores PIE al comienzo de un

programa, antes de que se habiliten las interrupciones, para asegurarse de que los ISR
correctos se asignan a las fuentes de interrupción correspondientes.
PieVectTable.TINT0 = &RTC;
ChatGPT
3/3
Esta línea de código establece la rutina de servicio de interrupción (ISR) para que la interrupción

TINT0 apunte a la RTCfunción. es PieVectTableuna estructura que define la tabla de vectores de

interrupción para el bloque Peripheral Interrupt Expansion (PIE). El TINT0campo en la

PieVectTableestructura representa el vector de interrupción para la interrupción TINT0, que es

generada por el módulo del temporizador 0 de la CPU. Al establecer este campo en la dirección

de la RTCfunción, le estamos diciendo a la CPU que ejecute la RTCfunción cada vez que se active

la interrupción TINT0.

InitCpuTimers();
ChatGPT
11 / 11
InitCpuTimers()es una funcion

ConfigCpuTimer(&CpuTimer0, 150, (largo sin firmar)(Ts*1000000));


ChatGPT
2/2
Esta llamada de función configura CpuTimer0 con un período de Ts segundos (en este caso, 0,5

segundos) y un valor de escalador previo de 150.


La función ConfigCpuTimer() toma tres argumentos: un puntero a la estructura del temporizador

(en este caso, &CpuTimer0), el valor del escalador previo y el período del temporizador en el

conteo del reloj del temporizador.

El valor del preescalador determina cuánto se divide la frecuencia del reloj del temporizador

antes de alimentar al temporizador. En este caso, la frecuencia del reloj del temporizador se
divide por 150, por lo que la frecuencia del reloj del temporizador es 150 veces más lenta que la

frecuencia del reloj de la CPU.

El período del temporizador en los conteos del reloj del temporizador se calcula multiplicando el

período de tiempo deseado por la frecuencia del reloj del temporizador. En este caso, el período

del temporizador en las cuentas del reloj del temporizador se calcula como Ts*1000000, ya que

la frecuencia del reloj del temporizador es de 1 MHz (suponiendo una frecuencia de reloj de la

CPU de 100 MHz).

Entonces, la llamada a la función ConfigCpuTimer() está configurando CpuTimer0 para generar

una interrupción cada 0,5 segundos, con un valor de escalador previo de 150 para dividir la
frecuencia del reloj del temporizador entre 150.

CpuTimer0Regs.TCR.todo = 0x4000;
ChatGPT
2/2
Esta línea establece el registro de control de CpuTimer0, que se utiliza para iniciar el conteo del

temporizador. El valor 0x4000establece el bit 14 (TSS, Timer Stop/Start) a 0, iniciando el conteo

del temporizador. Deja el resto de los bits en el registro de control en sus valores

predeterminados, por lo que el temporizador se configura para incrementarse en el reloj de la

CPU, sin ninguna acción de interrupción o desbordamiento habilitada.


IER |= M_INT1;
ChatGPT
Esta línea configura el registro de habilitación de interrupción (IER) para habilitar interrupciones

para el grupo 1, que incluye interrupciones del temporizador 0. El |=operador es una operación

OR bit a bit, lo que significa que establece los bits que son 1 en el operando derecho. En este

caso, M_INT1es una máscara de bits definida en otra parte del código, que establece el bit para

el grupo 1.

PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
ChatGPT
Esta línea de código configura el controlador PIE (expansión de interrupción periférica) para

habilitar el manejo de interrupciones para la fuente de interrupción específica INTx7 (interrupción

7) en el grupo PIE 1. Al establecer el bit correspondiente en el registro PIEIER1 en 1, se le

indica al controlador que habilite manejo de interrupciones para esta fuente de interrupción

específica.

2/2
EINT; ERTM;
ChatGPT
3/3
EINTy `ERTM
FUERZA DE
ChatGPT
El DINTcomando se usa para deshabilitar las interrupciones globales en un microcontrolador.

Este comando borra el indicador de interrupción global en la CPU, evitando que se procesen

más interrupciones hasta que el indicador de interrupción global se vuelva a habilitar con el

EINTcomando.

__interrupt void RTC(void){ CpuTimer0.InterruptCount++; PieCtrlRegs.PIEACK.all =


PIEACK_GROUP1; AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; AdcRegs.ADCTRL2.bit.SOC_SEQ1
= 1; while(AdcRegs.ADCST.bit.SEQ1_BSY == 1); uint16_adc = AdcMirror.ADCRESULT0;
voltaje = ((float)uint16_adc/4096.0)*3.0; SciaRegs.SCITXBUF = uint16_adc;
SciaRegs.SCITXBUF = (uint16_adc & 0xff00)>>8; }
ChatGPT
Esta es una rutina de servicio de interrupción (ISR) para la interrupción RTC (reloj en tiempo

real). Cuando ocurre la interrupción RTC, se ejecutará el código dentro de esta función.

La primera línea incrementa una variable de contador llamada "InterruptCount" para CpuTimer0.

La segunda línea borra el indicador de interrupción para la interrupción RTC escribiendo en el

registro PIEACK.

Las siguientes líneas configuran y activan una conversión de ADC en SEQ1 (secuenciador 1)

del ADC (convertidor de analógico a digital). El bucle while espera a que se complete la

conversión de ADC antes de continuar. Una vez que se completa la conversión, el resultado se

almacena en una variable llamada uint16_adc.

La siguiente línea calcula el voltaje según el resultado del ADC.

Finalmente, las dos últimas líneas transmiten el resultado del ADC a través de la interfaz de

comunicación serial A (SCIA) en dos bytes separados (MSB y LSB) usando el registro

SCITXBUF.
2/2
CpuTimer0Regs.TCR.todo = 0x4000; IER |= M_INT1; PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
ChatGPT
Estas líneas de código habilitan la interrupción para el Timer0 y configuran el controlador de

interrupciones PIE para manejar la interrupción del Timer0.

CpuTimer0Regs.TCR.all = 0x4000;establece el registro de control del temporizador

UART_FIFO_config();
ChatGPT
No estoy seguro de qué configuración específica desea implementar para UART FIFO. ¿Podría

proporcionar más información o contexto sobre lo que quiere lograr?

UART_config();
ChatGPT
2/2
Lo siento, pero sin contexto adicional, no estoy seguro de a qué configuración de UART

específica se refiere. ¿Puede proporcionar más detalles o fragmentos de código?


hacer{ while(SciaRegs.SCIFFRX.bit.RXFFST == 0); byte_received =
SciaRegs.SCIRXBUF.bit.RXDT; }mientras(byte_recibido!='S');
ChatGPT
Este fragmento de código parece estar esperando la recepción del carácter 'S' en la interfaz
SCI-A. Está esperando en un bucle hasta que el búfer FIFO de recepción tenga al menos un

byte (indicado por SciaRegs.SCIFFRX.bit.RXFFST == 0). Una vez que se recibe un byte, se

almacena en la variable byte_received. Este ciclo continuará ejecutándose hasta que el byte

recibido sea 'S'.

SciaRegs.SCITXBUF = x;
ChatGPT
Esta línea envía el valor de la variable xa través del búfer del transmisor SCI-A (Interfaz de

comunicación en serie A), donde xsuele ser un valor de 8 bits que representa un carácter o un

byte de datos. El módulo SCI luego envía el byte de datos en serie a través de la línea de

comunicación.

2/2
que significa la función InitSciaGpio();
ChatGPT
La función InitSciaGpio() es una función que inicializa los pines GPIO asociados a la interfaz

SCI-A del microcontrolador. SCI-A es una serie de interfaz asíncrona que puede ser utilizada

para comunicarse con otros dispositivos serie como sensores, actuadores, pantallas, entre otros.

La función InitSciaGpio() configura los pines GPIO del microcontrolador para que estén

conectados a los pines de entrada/salida de la interfaz SCI-A. Esto es necesario para que el

microcontrolador pueda transmitir y recibir datos a través de la interfaz SCI-A. La configuración

específica de los pines GPIO depende del


UART_FIFO_config(); UART_config(); UART_BAUD_RATE();
ChatGPT
3/3
Según los nombres de las funciones, parece que estas funciones están relacionadas con la

configuración e inicialización de la comunicación UART para un dispositivo en particular.

UART_FIFO_config()probablemente configura el búfer UART First-In-First-Out (FIFO), que se

utiliza para almacenar datos entrantes y salientes.

UART_config()probablemente conjuntos

SciaRegs.SCICTL1.bit.SWRESET = 1;
ChatGPT
Esta línea de código establece el bit SWRESET (restablecimiento de software) del registro
SCICTL1 (registro de control 1 de SCI) en 1. Esto provoca un restablecimiento de software del

módulo SCI, que borra todos los registros internos y restablece el módulo a su estado
predeterminado.

AdcRegs.ADCTRL1.all = 0;
ChatGPT
Esta línea de código establece el valor del registro ADCTRL1 del módulo ADC en 0. El registro

ADCTRL1 se usa para configurar varios ajustes relacionados con el ADC, como la ventana de
muestreo, el modo de disparo y la resolución. Al establecerlo en 0, todas estas configuraciones

se borran y el ADC se desactiva efectivamente.

AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
while(AdcRegs.ADCST.bit.SEQ1_BSY == 1); uint16_adc = AdcMirror.ADCRESULT0; voltaje =
((float)uint16_adc/4096.0)*3.0; SciaRegs.SCITXBUF = uint16_adc; SciaRegs.SCITXBUF =
(uint16_adc & 0xff00)>>8;
ChatGPT
Estas líneas de código leen una entrada analógica utilizando el módulo ADC del

microcontrolador, convierten el resultado en un voltaje y luego envían el resultado a través del

módulo SCI (interfaz de comunicación en serie) a un dispositivo conectado.

Específicamente, las dos primeras líneas restablecen la secuencia ADC y comienzan una nueva

conversión. El bucle while espera a que finalice la conversión antes de leer el resultado ADC

almacenado en el registro ADCRESULT0. El voltaje se calcula dividiendo el resultado del ADC

por el valor máximo (4096) y luego multiplicándolo por el voltaje de referencia (3,0 V en este

caso). Finalmente, el resultado se envía a través del módulo SCI escribiéndolo en el registro

SCITXBUF. El resultado se divide en dos bytes y se envía por separado ya que el registro tiene

8 bits de ancho y el resultado tiene 12 bits de ancho.

AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
ChatGPT
La declaración AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;se utiliza para restablecer la lógica de

secuenciación de conversión de ADC. Esto normalmente se hace antes de comenzar una nueva

secuencia de conversión. Cuando se establece este bit, la secuencia de conversión se

restablece al comienzo de la secuencia. Esto significa que el ADC iniciará una nueva conversión

en el primer canal de la secuencia cuando reciba la señal de inicio de conversión (SOC).


AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
ChatGPT
Estas líneas de código configuran el bit SOC (Inicio de conversión) para que el ADC Sequencer

1 active una conversión. Cuando el bit SOC se establece en 1, el ADC iniciará una conversión

en el siguiente borde ADCCLK. Luego, el secuenciador comenzará a convertir cada canal en la


secuencia uno por uno hasta que todos los canales se hayan convertido, de acuerdo con la

configuración en el Registro de control del secuenciador ADC 1 (ADCSEQCTL1). El resultado de

la conversión se almacenará en el Result FIFO correspondiente, en este caso FIFO 0.

AdcRegs.ADCST.bit.SEQ1_BSY == 1
ChatGPT
2/2
AdcRegs.ADCST.bit.SEQ1_BSYes una bandera

AdcRegs.ADCST.bit.SEQ1_BSY
ChatGPT
4/4
AdcRegs.ADCST.bit.SEQ1_BSYcomprueba el estado
AdcMirror.ADCRESULT0
ChatGPT
2/2
AdcMirror.ADCRESULT0es el valor del primer ADC

(uint16_adc y 0xff00)>>8;
ChatGPT
2/2
(uint16_adc & 0xff00)>>8es una operación bit a bit que extrae el byte alto de la

uint16_adcvariable realizando un AND lógico con el número hexadecimal 0xff00, que tiene el

efecto de establecer todos los bits en el byte inferior en 0 y mantener todos los bits en el byte

superior sin cambios. Luego, el valor resultante se desplaza 8 bits a la derecha, lo que tiene el

efecto de mover el byte alto a la posición del byte inferior, descartando el byte bajo. De esta

forma, el valor obtenido es el byte alto de uint16_adc.

SysCtrlRegs.HISPCP.all = 3;
ChatGPT
2/2
La línea SysCtrlRegs.HISPCP.all = 3;establece el escalador previo del reloj periférico de alta

velocidad para dividir el reloj de la CPU por 3, lo que significa que el reloj periférico de alta

velocidad (HSPCLK) se ejecutará a un tercio de la frecuencia del reloj de la CPU. El

HISPCPregistro controla la frecuencia del HSPCLK, que se utiliza para controlar varios periféricos

de alta velocidad, como los módulos McBSP, SPI, SCI y CAN. Al configurarlo HISPCPen 3, se

reducirá la frecuencia HSPCLK, lo que puede ayudar a evitar violaciones de tiempo o problemas

de integridad de la señal cuando se comunica con periféricos de alta velocidad.


while(SciaRegs.SCIFFRX.bit.RXFFST == 0); byte_received = SciaRegs.SCIRXBUF.bit.RXDT;
while(SciaRegs.SCIFFRX.bit.RXFFST == 0); ECap1Regs.CAP2 =
(SciaRegs.SCIRXBUF.bit.RXDT<<8) + byte_recibido;
ChatGPT
Este código espera hasta que haya al menos un byte en el búfer FIFO de recepción del módulo

SCI-A (línea 1), luego lee ese byte (línea 2). Luego, espera nuevamente hasta que haya al

menos un byte más en el búfer (línea 3), lee ese byte y lo concatena con el byte anterior para

formar un valor de 16 bits (línea 4). Luego, este valor se almacena en el registro de captura
CAP2 del módulo eCAP1, que se utiliza para medir la frecuencia y el ciclo de trabajo de una

forma de onda.

InitECapGpio();
ChatGPT
La función InitECapGpio()inicializa los pines GPIO utilizados por el módulo de captura

mejorada (eCAP). Estos pines se utilizan para capturar eventos externos y generar

interrupciones en la CPU. El módulo eCAP es un temporizador de alta resolución que puede

capturar el tiempo de eventos externos con gran precisión.

En resumen, InitECapGpio()configura los pines GPIO necesarios para que el módulo eCAP

funcione correctamente.

PWM_config();
ChatGPT
Lo siento, pero no tengo suficiente contexto para dar una respuesta específica. ¿Puede

proporcionar más información sobre el sistema en el que está trabajando y el propósito de la

función PWM_config()?
ECap1Regs.CAP2 = 0;
ChatGPT
Este código pone a cero el valor del registro de captura CAP2 del eCAP periférico 1. El periférico

eCAP se usa típicamente para capturar el tiempo entre dos eventos externos, como los flancos

ascendentes de dos señales diferentes. El registro CAP2 contiene el valor del segundo evento
capturado, que puede usarse para calcular el tiempo entre los dos eventos. Al establecer el valor

en cero, el código restablece el registro de captura para prepararse para un nuevo evento de

captura.

SciaRegs.SCIFFRX.bit.RXFFST
ChatGPT
7/7
SciaRegs.SCIFFRX.bit.RXFFSTes un campo de registro que indica el número de bytes

disponibles en el búfer FIFO de recepción de la interfaz de comunicación serie (SCI). Si


RXFFSTes distinto de cero, significa que hay al menos un byte en el búfer de recepción

esperando a ser leído.

SciaRegs.SCIRXBUF.bit.RXDT
ChatGPT
6/6
SciaRegs.SCIRXBUF.bit.RXDTes un campo de bit de registro que contiene el carácter de datos

recibido del búfer de registro de recepción SCI. En otras palabras, son los datos que ha recibido

el módulo UART y están siendo leídos por el microcontrolador.


ECap1Regs.CAP2 = (SciaRegs.SCIRXBUF.bit.RXDT<<8) + byte_recibido;
ChatGPT
Esta línea de código lee dos bytes del búfer de recepción SCI y los combina en un valor de 16

bits que luego se escribe en el registro de captura CAP2 de ECap1. lee

SciaRegs.SCIRXBUF.bit.RXDTel byte menos significativo y byte_receivedcontiene el byte más

significativo que se leyó en la iteración anterior del bucle. Al desplazarse

SciaRegs.SCIRXBUF.bit.RXDT8 bits a la izquierda y agregar byte_received, los dos bytes se

combinan en un valor de 16 bits que se puede escribir en CAP2. Esto se usa típicamente para

capturar el período de una forma de onda.

ECap1Regs.CAP2
ChatGPT
3/3
ECap1Regs.CAP2es un registro en el microcontrolador C2000 que contiene el valor del segundo

registro de captura en el módulo eCAP (captura mejorada) correspondiente. Este registro

captura el tiempo entre dos flancos de una señal. En el fragmento de código proporcionado, el

valor de ECap1Regs.CAP2se establece en la concatenación de dos bytes recibidos a través del

módulo SCI (interfaz de comunicación en serie), formando un valor de 16 bits que representa el

tiempo entre dos bordes de una señal.

SciaRegs.SCIRXBUF.bit.RXDT
ChatGPT
4/4
La expresión SciaRegs.SCIRXBUF.bit.RXDTlee los datos en el búfer de datos de recepción del

periférico SCI-A, que es una interfaz UART. Recupera el último byte recibido por la UART.

SciaRegs.SCITXBUF = GpioDataRegs.GPADAT.bit.GPIO2 +
(GpioDataRegs.GPADAT.bit.GPIO3<<1);
ChatGPT
Esta línea de código envía el valor de dos pines GPIO, GPIO2 y GPIO3, a través del bus SCI

(interfaz de comunicación en serie) utilizando el registro SCITXBUF.

Se accede a los pines GPIO mediante la estructura GpioDataRegs, que proporciona un conjunto

de registros para leer y escribir en los pines GPIO del dispositivo.

El valor de GPIO2 se desplaza 1 bit a la izquierda y luego se suma al valor de GPIO3. Esto crea

un valor binario de 2 bits que se puede enviar a través del bus SCI. El significado exacto de este

valor dependerá de la aplicación específica y de cómo lo interprete el dispositivo receptor.

GpioDataRegs.GPADAT.all = (GpioDataRegs.GPADAT.all & 0xfffffffc) + byte_received;


ChatGPT
Esta línea de código lee el estado actual de los pines GPIO 0 y 1, los establece en 0 y luego

agrega el valor de byte_receiveda los pines para establecer su nuevo estado. Específicamente,

primero borra los dos bits menos significativos GpioDataRegs.GPADAT.allal realizar un AND bit a

bit con 0xfffffffc, que establece todos los bits en 1 excepto los dos bits menos significativos,

que se establecen en 0. Luego se suma byte_receivedal resultado, estableciendo

efectivamente los dos bits menos significativos. bits al valor de byte_received. Luego, el valor

resultante se vuelve a escribir en GpioDataRegs.GPADAT.all, actualizando el estado de los dos

pines GPIO.

También podría gustarte