реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> adc_spi_init, нужна помощь в написании модуля
andreichk
сообщение Mar 24 2018, 21:44
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Привет народ, кто может помочь дописать модуль на верилоге для инициализации ADC4245 по заданному описанию?

Цитата
HIGH PERF MODE
echo -en "\x03\x00" > $SPI_DEV
# LVDS CMOS
#echo -en "\x41\x00" > $SPI_DEV
# EN DIGITAL
echo -en "\x42\x08" > $SPI_DEV
# LVDS STRENG
#echo -en "\x45\x00" > $SPI_DEV
# HIGH FREQ MODE CH B
#echo -en "\x4A\x00" > $SPI_DEV
# HIGH FREQ MODE CH A
#echo -en "\x58\x00" > $SPI_DEV

# CH A/B TEST PATTERNS
echo -en "\x25\x04" > $SPI_DEV
echo -en "\x2B\x04" > $SPI_DEV
# Start calibration
devmem 0x43C20044 32 0x00000100
sleep 2
ADC_DONE_STATUS=$((`devmem 0x43C20010` & 0x00000003))
if [[ $ADC_DONE_STATUS -eq 3 ]]
then
echo -ne $yellow
echo "Calibration Done"
echo -ne $normal
else
echo -ne $lightred
echo "Calibration Failed"
echo -ne $normal
fi
# Stop calibration
devmem 0x43C20044 32 0x00000000
# CH A/B Normal mode
echo -en "\x25\xC0" > $SPI_DEV
echo -en "\x2B\x00" > $SPI_DEV


предполагаю, что начало должно выглядеть так:

Код
`timescale 1ms / 1ns
//////////////////////////////////////////////////////////////////////////////////
// Module Name: adc_spi  настройка ацп по спи
//////////////////////////////////////////////////////////////////////////////////
module adc_spi_init(
  // Clock
  input wire clock,
  input wire init_en,
  // ADC Out
  output  reg adc_sload,
  output wire adc_sclk,
  output  reg adc_sdata
);

reg [7:0]HIGH_PERF_MODE = 8'h03 & 8'h00;      // HIGH_PERF_MODE
reg [7:0]LVDS_CMOS = 8'h41 & 8'h00;           // LVDS_CMOS

reg [7:0]EN_DIGITAL = 8'h42 & 8'h08;          // EN_DIGITAL
reg [7:0]LVDS_STRENG = 8'h45 & 8'h00;         // LVDS_STRENG

reg [7:0]HIGH_FREQ_MODE_CH_B = 8'h4A & 8'h00; // HIGH_FREQ_MODE_CH_B
reg [7:0]HIGH_FREQ_MODE_CH_A = 8'h58 & 8'h00; // HIGH_FREQ_MODE_CH_A

reg [7:0]CH_A_TEST_PATTERNS = 8'h25 & 8'h04;  // CH_A_TEST_PATTERNS
reg [7:0]CH_B_TEST_PATTERNS = 8'h2B & 8'h04;  // CH_B_TEST_PATTERNS

always @ ( posedge clock )

  begin
..........................................

end

endmodule


Приветствуется любая помощь. Заранее спасибо...


--------------------
Go to the top of the page
 
+Quote Post
andreichk
сообщение Mar 25 2018, 16:35
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Код
// HIGH PERF MODE
          xil_printf("%b", 0x03, 0x00 );
// LVDS CMOS
          xil_printf("%b", 0x41, 0x00);
// EN DIGITAL
          xil_printf("%d", 0x42, 0x08);
// LVDS STRENG
          xil_printf("%b", 0x45, 0x00);
// HIGH FREQ MODE CH B
          xil_printf("%b", 0x4A, 0x00);
// HIGH FREQ MODE CH A
          xil_printf("%b", 0x58, 0x00);

// CH A/B TEST PATTERNS
          xil_printf("%b", 0x25, 0x04);
          xil_printf("%b", 0x2B, 0x04);
// Start calibration

                ///    devmem 0x43C20044 32 0x00000100 непонятно как это описать?

             delay(2); // delay one second    sleep 2

                ///ADC_DONE_STATUS=$((`devmem 0x43C20010` & 0x00000003)) непонятно как это описать?

  if( inbyte()== 3 )//читаем ответ  if [[ $ADC_DONE_STATUS -eq 3 ]]
           xil_printf("Calibration Done");
      else xil_printf("Calibration Failed");

                                                    ///fi непонятно как это описать?
// Stop calibration
                            ///devmem 0x43C20044 32 0x00000000 непонятно как это описать?
// CH A/B Normal mode
             xil_printf("%b", 0x25, 0xC0);
             xil_printf("%b", 0x2B, 0x00);


подключил микроблейз к спартану. Поморгал светодиодами и инициализировал УАРТ.
Проверил осциллографом пины УАРТА, Точно вижу, что шлёт указанные байты. Но остались непонятки с синтаксисом. Кто подстажет, как это описать на Си в микроблейзе?
Спасибо заранее....


--------------------
Go to the top of the page
 
+Quote Post
andreichk
сообщение Mar 27 2018, 17:26
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



вобщем мы подумали и я решил: выкинуть УАРТ и выводить команды прямо в паралельный порт, с которого адресо-командо байты передаются в СПИ модуль в спартане.
выглядит это так:
код в микроблейзе:
Код
//================================================================================
=
//
//================================================================================
=
#include <pthread.h>
#include <stdio.h>
#include "platform.h"
#include <xparameters.h>
#include <xiomodule.h>
#include <xiomodule_l.h>

XIOModule gpo1;

volatile u16 addr_command[]= {
                                0x0002,// RESET
                                0x0001,// READOUT ENABLE
                                0x0300,// HIGH PERF MODE
                                0x4101,// LVDS/ КАНАЛ "В" ОТКЛЮЧЕН
                                0x4208,// EN DIGITAL
                                0x4500,// LVDS STRENG
                                0x4A00,// HIGH FREQ MODE CH B
                                0x5800,// HIGH FREQ MODE CH A
                                0x2504,// CH A TEST PATTERNS
                                0x2B04,// CH B TEST PATTERNS
                                0x2BC0,// CH B Normal mode
                                0x25C0,// CH A Normal mode
                                0x3D20,// ENABLE OFFSET CORR
                                0xCFBC,// FREEZE OFFSET CORR, OFFSET CORR TIME CONSTANT
                                0x2900,// DATA FORMAT Twos complement
                                0x4200 //, // DIS DIGITAL
                                //0x0000 //
};

volatile u32 ct = 0;
void delay(u32 ms) {
    ct = 0;            // set the counter to 0
    while (ct++ < ms); // wait for ms number of milliseconds
}

int main() {
            XIOModule_Initialize(&gpo1, XPAR_IOMODULE_0_DEVICE_ID);
            XIOModule_Start(&gpo1);

            volatile int i = 0;
             for (i = 0; i < 16; ++i) {
                                XIOModule_DiscreteWrite(&gpo1, 1, addr_command[i]);// отправка команд в АЦП
                                delay(2);
                            }
   return 0;
}


и приёмник в спартане:

Код
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Create Date:    26/03/2018
// Module Name:    SPI_Master
// SPI интерфейс для ADS4245
// Serial Data Input. This device has a 16-bit shift register.
//////////////////////////////////////////////////////////////////////////////////
module SPI_Master16(
      input clk,
     input [15:0]IN_Data,
      output reg CS,
      output reg SDATA,
      output reg SCLK
);
    
reg  [5:0] cnt;
reg  [9:0] DataRate;
reg  [4:0] ByteCaunt;
reg [15:0] DataINReg;

//------------------------------------------------
//Формирования тактовых импульсов и последовательных данных     
always @(posedge clk)
       begin
    
        if (CS == 0) begin
             cnt = cnt + 1'b1;
                      
                if (cnt == 12) begin
                    SCLK = 0;
                  SDATA = DataINReg [15 - ByteCaunt];                    
                        
                end
          
                if (cnt == 24) begin
                  
                          ByteCaunt = ByteCaunt + 1'b1;
                    SCLK = 1;
                      cnt = 0;
                        
                end
                  
          end else begin
          
                    SCLK = 1;
                      cnt = 0;
                  ByteCaunt =0;
                        SDATA = 0;
         end                        
          
   end        
//-----------------------------------------------
//-----------------------------------------------
// Формирование частоты обновления и чип селекта
// 120.88 МГц тактовые импульсы
// Поступающие данные 5 MГц
always @(posedge clk)
       begin
        
            DataRate = DataRate + 1'b1;
          
            if (DataRate == 256) begin
            
                  CS = 0;
                  
            end
          
            if (DataRate == 640) begin
            
                  CS = 1;
                  
                  DataRate = 0;
            end        

      end
//-----------------------------------------------

always @(posedge clk)
       begin
        
           DataINReg = IN_Data;
        
         end

endmodule


Код
//===============================================================================
//--------------------- ВСТРОЕННЫЙ ПРОЦЕССОР MICROBLAZE  ------------------------
//===============================================================================
wire [15:0]GPO1;  
reg  [15:0]data16;
wire ADS_CS, ADS_SDATA, ADS_SCLK;
microblaze_mcs_v1_4 mcs_0 (
                          .Clk(res_clkA),   //  input clk
                          .Reset(resetS0),  //  input Reset
                          .GPO1(GPO1[15:0]) // output [15 : 0] GPO1
);
//===============================================================================
//--------------------- ИНИЦИАЛИЗАЦИЯ И КАЛИБРОВКА ADS4245 ----------------------
//===============================================================================
SPI_Master16 ADS4245(
                    .clk(res_clkA),      //
                    .IN_Data(GPO1[15:0]),//входные данные 16bit
                     .CS(ADS_CS),
                     .SDATA(ADS_SDATA),
                     .SCLK(ADS_SCLK)
);
assign RESET = GPO1[1];  //"C14" '0' для управления по СПИ
assign SCLK  = ADS_SCLK; //"D15"
assign SDATA = ADS_SDATA;//"C16"
assign SEN   = ADS_CS;   //"D17"
//================================================================================
=


получилась вот такая картинка. вобщем , что посылаю, то и получаю.....


Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th September 2018 - 22:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01322 секунд с 7
ELECTRONIX ©2004-2016