ΣSigmaStudio English

Реализация системы

После завершения проектирования схемы и компиляции проекта вы готовы к переносу вашего проекта в код микроконтроллера, выполнив следующие основные шаги:

  1. Получите параметры и адреса из SigmaStudio (экспортируйте файлы .params, .hex и .h).
  2. Выполните синтаксический разбор файла с информацией о параметрах.
  3. Включите (интегрируйте) в код микроконтроллера.

Чтобы получить доступ к параметрам и адресам из SigmaStudio, необходимо сначала скомпилировать проект и экспортировать файлы параметров. После этого у вас будут два файла параметров:

  • yourfilename.hex — шестнадцатеричные значения параметров для записи в DSP.
  • yourfilename.params — подробный файл с адресами и значениями всех параметров.

Вы можете просмотреть примеры файлов *.params и *.hex в разделе Экспорт программы и параметров (Export Program and Parameters).

Ниже приведен пример того, как можно интегрировать параметры в код микроконтроллера (AD1940). Выделенные функции в главной функции также определены:

Реализация системы
Реализация системы
Реализация системы
Реализация системы
Реализация системы
Реализация системы

~~~~ Нажмите здесь, чтобы просмотреть приведенный выше исходный код в виде обычного текста |

# include "prog_data.h"

# include "param_data.h"

# include "Design_IC 1.h" // *** Этот файл сгенерирован SigmaStudio ***

# include "Design_IC 1_REG.h" // *** Этот файл сгенерирован SigmaStudio ***

# include "comms.h"

# define byte unsigned char

 

// Основная программа кода микроконтроллера

int main(void) 

{ 

// Настройка порта SPI — это зависит от аппаратного обеспечения

SpiInit(); 

Mute();

 

// Запись программы в DSP

SpiWrite(PROG_START_ADR, PROGRAM_DATA, PROG_LENGTH*6); 

 

// Подождать некоторое время

Wait(...);

 

// Запись файла параметров

SpiWrite(PARAM_START_ADR, PARAM_DATA, PARAM_LENGTH*4); 

Wait(...);

UnMute();

 

// Запись одного значения (0.242) по указанному адресу

// Адрес MODULE_Main_Single1_VALUE определён в

// заголовочном файле, сгенерированном SigmaStudio (Design_IC 1.h).

ParamWrite(MODULE_Main_Single1_VALUE, 0.242);

 

// Пример безопасной загрузки одного параметра: будет загружено значение 1.999 в формате 5.23

// по адресу 2

// Эта функция включает инициацию безопасной загрузки в parameter RAM

SafeloadSingleParamWrite(2, 1.999);

 

// Пример безопасной загрузки нескольких параметров (например, коэффициентов фильтра)

// - загружает данные в каждую из пяти позиций безопасной загрузки,

// - затем инициирует безопасную загрузку

SafeloadMultipleParamWrite(MODULE_Main_MidEQ1_Alg0_Stage0_B0_ADDRESS, 1.999, 0); 

SafeloadMultipleParamWrite(MODULE_Main_MidEQ1_Alg0_Stage0_B1_ADDRESS, -.988, 1); 

SafeloadMultipleParamWrite(MODULE_Main_MidEQ1_Alg0_Stage0_B2_ADDRESS, 1.999, 2);

SafeloadMultipleParamWrite(MODULE_Main_MidEQ1_Alg0_Stage0_A1_ADDRESS, -.999888, 3);

SafeloadMultipleParamWrite(MODULE_Main_MidEQ1_Alg0_Stage0_A2_ADDRESS, 1.999, 4);

InitSafeloadParam();

 

return 0;

}

 

// Функция ожидания кода микроконтроллера

void Wait(float time) // время ожидания в миллисекундах

{

long cycles;

cycles = time / 1.422e-3; // при условии тактовой частоты ядра микроконтроллера 45 МГц

while (cycles != 0)

{

  --cycles; 

}

}

 

// Функция отключения звука кода микроконтроллера

void Mute()

{

byte corecontrol[2] = {0x00, 0x00}; 

// Запись в регистр управления ядром

SpiWrite(CORE_CONTROL_REG, corecontrol, 2);

// Подождать 20 мкс

Wait(20);

}

 

// Функция включения звука кода микроконтроллера

void UnMute()

{

byte corecontrol[2] = {0x02, 0x00}; 

// Запись в регистр управления ядром

SpiWrite(CORE_CONTROL_REG, corecontrol, 2);

// Подождать 20 мкс

Wait(20);  

}

 

// Функция SpiWrite микроконтроллера

// Функция принимает начальный адрес для записи, массив

// данных и длину массива (в байтах).

void SpiWrite(short address, unsigned char* data, int length)

{ 

int i = 0;

byte address_hi = 0; // старший байт адреса регистра/RAM

byte address_lo = 0; // младший байт адреса регистра/RAM

address_lo = (byte)address; // получить младший байт адреса регистра/RAM

address_hi = (byte)(address>>8); // получить старший байт адреса, сдвинутый влево на 8 бит

 

// Вставьте сюда вашу функцию записи

SPI_TX_REG = 0x00; // Запись в DSP по адресу чипа 0

SPI_TX_REG = address_hi; // Запись старшего байта адреса

SPI_TX_REG = address_lo; // Запись младшего байта адреса

for (i=0; i>8);

 

// Вставьте сюда вашу функцию записи

SPI_RX_REG = 0x01;        // Запись в DSP и установка бита RW в 1

SPI_RX_REG = address_hi;  // Запись старшего байта адреса

SPI_RX_REG = address_lo;  // Запись младшего байта адреса

 

for (i=0; i>8); 

 

byte param_addr_lo;

byte param_addr_hi;

 

// получить младший байт адреса параметра

param_addr_lo=(byte)param_addr;  

// получить старший байт адреса, сдвинутый влево на 8 бит

param_addr_hi=(byte)(param_addr>>8); 

 

SPI_TX_REG = 0x00; // Запись в DSP по адресу чипа 0

SPI_TX_REG = safe_addr_hi; // Запись старшего байта адреса безопасной загрузки

SPI_TX_REG = safe_addr_lo; // Запись младшего байта адреса безопасной загрузки

 

SPI_TX_REG = param_addr_hi; // Запись старшего байта адреса параметра

SPI_TX_REG = param_addr_lo; // Запись младшего байта адреса параметра

}

 

// Функции кода микроконтроллера, безопасная загрузка: SafeParam

void SafeParam(short safe_param, unsigned char* param_data)

{

byte safe_param_lo;

byte safe_param_hi;

 

// получить младший байт адреса регистра/RAM

safe_param_lo=(byte)safe_param;

// получить старший байт адреса, сдвинутый влево на 8 бит

safe_param_hi=(byte)(safe_param>>8); 

 

SPI_TX_REG = 0x00; // Запись в DSP по адресу чипа 0

SPI_TX_REG = safe_param_hi; // Запись старшего байта адреса безопасной загрузки

SPI_TX_REG = safe_param_lo; // Запись младшего байта адреса безопасной загрузки

 

SPI_TX_REG = param_data[4]; // Запись байта 4 параметра (старшие биты)

SPI_TX_REG = param_data[3]; // Запись байта 3 параметра

SPI_TX_REG = param_data[2]; // Запись байта 2 параметра

SPI_TX_REG = param_data[1]; // Запись байта 1 параметра

SPI_TX_REG = param_data[0]; // Запись байта 1 параметра (младшие биты)

}

 

// Примечание: SafeParam и SafeAddr должны выполняться вместе.

 

// Функции кода микроконтроллера: преобразование числа с плавающей точкой в формат 5.23

void To523(float param_dec, byte* param_hex)

{

long param223;

long param227;

 

// умножить десятичное число на 2^23

param223 = param_dec * (1 << 23);

// преобразовать в положительное двоичное число

param227 = param223 + (1 << 27); 

 

param_hex[3]=(byte)param227;  // получить байт 3 (младшие биты) значения параметра

param_hex[2]=(byte)(param227>>8); // получить байт 2 значения параметра

param_hex[1]=(byte)(param227>>16); // получить байт 1 значения параметра

// получить байт 0 (старшие биты) значения параметра

param_hex[0]=(byte)(param227>>24); 

// инвертировать знаковый бит для получения правильного знака

param_hex[0] = param_hex[0] ^ 0x08; 

}

~~~~