📄 recuperareloj.m
字号:
function [trama, memoria] = recuperaReloj(linea, memoria, primera, N)
%------------------------------------------------------------------------
% [trama, memoria] = recuperaReloj(linea, memoria, primera, N)
%------------------------------------------------------------------------
%| Funci�n que implementa la recuperaci�n de reloj mediante
%| detecci�n de flancos de bajada.
%| Est� dise�ada para tratar una sola muestra, por lo que se deber� llamar
%| dentro de un bucle.
%|
%| Entradas:
%| 1.- LINEA = muestra de la se�al de l�nea (tren de pulsos TTL)
%| 2.- MEMORIA = vector fila con la memoria del reloj.
%| 3.- PRIMERA = indica si esta es la primera iteraci�n, es decir,
%| en memoria no hay ninguna muestra del pasado.
%| 4.- N = n� de flancos usados para detectar sincronismo
%| Restricciones: N<=50, que es la long. de SYNCRO
%|
%| Salida:
%| 1.- TRAMA = vector de "0" y "1" con la se�al detectada
%-------------------------------------------------------------------------
% Autor: Cesar Delgado
% Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------
%#######################################################################################
% 0.- Definici�n de Ctes.
%#######################################################################################
contMUESTRA = 1; % Contador de Muestras
muestraANT = 4; % Muestra Anterior
ESTADO = 5; % Banera: 0 = recuperaci�n sincronismo; 1 = recepci�n trama
trama = [];
BOD = [1 1 0 0 1 1 0 0];
%########################################################################################
% 1.- Aut�mata
%########################################################################################
memoria(contMUESTRA) = memoria(contMUESTRA) + 1; % Contador Muestras ++
if (~primera) & (~isempty(linea)),
switch memoria(ESTADO),
%%%%%%%%%%%%%%%%%%%%%%%%%%%% PERIODO RELOJ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case 0,
memoria = periodoReloj(linea, N, memoria);
%break;
%%%%%%%%%%%%%%%%%%%%%%%%% SINCRONISMO DE MENSAJE %%%%%%%%%%%%%%%%%%%%%%%%%
case 3,
memoria = sincroMsj(linea, memoria);
% Si pasamo a la fase de RX, insertamos cabeceras SYNCRO y BOD.
if memoria(ESTADO)==4,
trama(1:2:100) = ones(1,50);
trama = [trama 0 BOD];
end;
%break;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%% RECEPCI�N DE TRAMA %%%%%%%%%%%%%%%%%%%%%%%%%%%
case 4,
[trama, memoria] = rxTrama(linea, memoria);
%break;
end; % End del Switch
elseif primera,
memoria(muestraANT) = linea;
end;
%-------------------------------------------------------------------------
% Los motivos por los que se conservan las cabeceras SYNCRO + BOD son:
% a) Comprobaci�n entre las tramas del RX y TX, para verificar
% errores y la repercusi�n de errores en las cabeceras
% b) Desacoplar las funciones del nivel 2 de las del nivel 1
%-------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -