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

 
 
> Microblaze InstancePtr
-=Vitaly=-
сообщение May 17 2007, 03:59
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991



Здравствуйте, где для Микроблейзового софта взять

*InstancePtr для функции XSpi_SetSlaveSelect??

Спасибо.

Сообщение отредактировал -=Vitaly=- - May 17 2007, 04:13
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
CodeWarrior1241
сообщение May 18 2007, 09:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 496
Регистрация: 14-03-07
Из: In The District
Пользователь №: 26 165



Так зделайте его глобальным и все! Веди это же ваш XDevice DeviceInstance. Там где делаете declaration of structure XDevice, там и делаете declaration of the pointer...

Хотя я наверно не единственный умный, Вы наверно так уже пробовали. И не работало?


--------------------
In Mozilla, you keep tabs on your browser. In the USSR, your browser keeps tabs on you.
Go to the top of the page
 
+Quote Post
-=Vitaly=-
сообщение May 18 2007, 09:34
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991



Цитата(CodeWarrior1241 @ May 18 2007, 12:00) *
Так зделайте его глобальным и все! Веди это же ваш XDevice DeviceInstance. Там где делаете declaration of structure XDevice, там и делаете declaration of the pointer...

Хотя я наверно не единственный умный, Вы наверно так уже пробовали. И не работало?


Не, вы наверное единственный умный. Я с С работаю всего неделю, так что я 07.gif не совсем догоняю как это сделать. Если вас не затруднит строчечку crying.gif чиркануть про declaration of the pointer... , то я был бы неимоверно 08.gif и вам большой a14.gif

Спасибо!
Go to the top of the page
 
+Quote Post
XVR
сообщение May 21 2007, 09:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(-=Vitaly=- @ May 18 2007, 13:34) *
Не, вы наверное единственный умный. Я с С работаю всего неделю,


С этого и надо было начинать smile.gif



У Вас направильно определен этот самый InstancePtr, надо делать так:

Код
XSpi MY_Spi;



void InitSPI (void)
{
    XSpi_Initialize(&MY_Spi,XPAR_OPB_SPI_0_DEVICE_ID);
    XSpi_Start(&MY_Spi);  

...

}
Go to the top of the page
 
+Quote Post
-=Vitaly=-
сообщение May 21 2007, 12:57
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991



Цитата(XVR @ May 21 2007, 12:22) *
С этого и надо было начинать smile.gif



У Вас направильно определен этот самый InstancePtr, надо делать так:

Код
XSpi MY_Spi;



void InitSPI (void)
{
    XSpi_Initialize(&MY_Spi,XPAR_OPB_SPI_0_DEVICE_ID);
    XSpi_Start(&MY_Spi);  

...

}

Действительно

Код
// Welcome to Xilinx Platform Studio SDK !
//
// This is an automatically created source file to help you get started.
// To add more files, navigate to File -> New -> File
// You may delete this file if you want to use only other files for your project.
//
#include "xparameters.h"
#include "xspi_l.h"
//#include "xspi_i.h"
#include "xspi.h"
#include "stdio.h"
//------------------------- Variable declarations-----------------------------------
Xuint32 SPI_REG_STATUS;
XSpi MY_Spi;
//-------------------------Function prototypes------------------------------------
void InitSPI (void);

//Initial SPI function
void InitSPI (void)
{

    Xuint32 status;
    XSpi_Initialize(&MY_Spi,XPAR_OPB_SPI_0_DEVICE_ID);
    XSpi_Start(&MY_Spi);  
    status= XSpi_SelfTest(&MY_Spi);
    if(status== XST_SUCCESS){
        xil_printf("Spi selftest succesful /r/n");
      }
    if(status ==XST_REGISTER_ERROR)    {
        xil_printf("SPI register didn't read or write correctly");
    }
    if(status==XST_LOOPBACK_ERROR){
        xil_printf("SPI loopback error has occured");
  }

  XSpi_SetOptions(&MY_Spi,(XSP_CR_MASTER_MODE_MASK | XSP_CR_MANUAL_SS_MASK));
}
Xuint32 k,tmp_data;
//--------------------------------------Main Function-----------------------------------------
void main(void)
{  
      
           while(TRUE)
         {
          InitSPI();
          xil_printf("SUCCESS");
         }
}
//---------------------------------------------------------------------------------------------

Вроде завелось таким макаром, но надо еще по-тестировать
Интересно, а почему тогда в документации везде не & a *, или я чего-то не доганяю???
Go to the top of the page
 
+Quote Post
XVR
сообщение May 22 2007, 07:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(-=Vitaly=- @ May 21 2007, 16:57) *
Действительно

Вроде завелось таким макаром, но надо еще по-тестировать
Интересно, а почему тогда в документации везде не & a *, или я чего-то не доганяю???


Все просто, функции XSpi_* хотят УКАЗАТЕЛЬ на ЭКЗЕМПЛЯР структуры XSpi, если вы создаете только указатель (XSpi* InstancePtr), то функции получают указатель, указывающий неизвестно куда (точнее указывающий на 0 адрес), поэтому вы должны создать ЭКЗЕМПЛЯР структуры (XSpi My_SPI) и передать УКАЗАТЕЛЬ на него в функции работы с SPI. Оператор '&' берет адрес от переменной (того самого ЭКЗЕМПЛЯРА структуры), который как раз и является УКАЗАТЕЛЕМ, с которым хотят работать XSpi_* функции.

Что касается совета CodeWarrior1241 использовать меньше глобальных переменных, то тут он прав, а что касается идеи передавать MySpi по ЗНАЧЕНИЮ в функцию InitSPI - то тут он не прав, такая передача во первых сожрет дополнительную память (на копию структуры параметра), а во вторых не позволит работать с ней за пределами InitSPI, так как вся инициализация этой структуры останется в локальной копии - параметре и не попадет в место вызова InitSPI. В данном случае нужно или передавать указатель, объявив экземпляр структуры в месте вызова InitSPI, либо сделать эту переменную локальной в самой функции InitSPI не передавая вообще ничего (но в таком случае ВСЯ работа с MySpi должна содержаться ВНУТРИ InitSPI)
Go to the top of the page
 
+Quote Post
CodeWarrior1241
сообщение May 22 2007, 12:34
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 496
Регистрация: 14-03-07
Из: In The District
Пользователь №: 26 165



Цитата(XVR @ May 22 2007, 03:30) *
Что касается идеи передавать MySpi по ЗНАЧЕНИЮ в функцию InitSPI, такая передача во первых сожрет дополнительную память (на копию структуры параметра), а во вторых не позволит работать с ней за пределами InitSPI, так как вся инициализация этой структуры останется в локальной копии - параметре и не попадет в место вызова InitSPI. В данном случае нужно или передавать указатель, объявив экземпляр структуры в месте вызова InitSPI, либо сделать эту переменную локальной в самой функции InitSPI не передавая вообще ничего (но в таком случае ВСЯ работа с MySpi должна содержаться ВНУТРИ InitSPI)

Согласен... Но предполагалось что пока -=Vitaly=- отлажевает код, работать с MySpi ему придется только внутри его отладочной функции. А потом он бы разобрался biggrin.gif .
2 -=Vitaly=-:
Пришлите Вашу xspi_i.h файл (?), моя приложена к этому post. Может diff сделайте с Вашим?


--------------------
In Mozilla, you keep tabs on your browser. In the USSR, your browser keeps tabs on you.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- -=Vitaly=-   Microblaze InstancePtr   May 17 2007, 03:59
- - -=Vitaly=-   Здравствуйте, где для Микроблейзового софта взять ...   May 17 2007, 11:18
|- - CodeWarrior1241   Цитата(-=Vitaly=- @ May 17 2007, 07...   May 17 2007, 12:22
|- - -=Vitaly=-   Спасибо. Я хочу банально вручную выставлять SS си...   May 17 2007, 12:41
- - CodeWarrior1241   Вы пользуетесь low-level function XSpi_mSetControl...   May 17 2007, 16:13
|- - -=Vitaly=-   Цитата(CodeWarrior1241 @ May 17 2007, 19...   May 18 2007, 05:43
|- - CodeWarrior1241   Я возможно перестал понимать суть вопроса... point...   May 18 2007, 11:38
||- - -=Vitaly=-   Хе, хе бой продолжается. Перестало компилиться нах...   May 21 2007, 07:54
||- - -=Vitaly=-   Спасибо, но у меня при включении xspi_i.h отказыва...   May 22 2007, 11:21
|||- - -=Vitaly=-   Пока сделал так, проверил работает, правда приходи...   May 22 2007, 14:32
|- - CodeWarrior1241   ЦитатаУ Вас направильно определен этот самый Insta...   May 21 2007, 12:59
- - CodeWarrior1241   2 -=Vitaly=-: Я попробовал зделать EDK8.2 проект и...   May 23 2007, 05:56
|- - -=Vitaly=-   Цитата(CodeWarrior1241 @ May 23 2007, 08...   May 23 2007, 09:09
|- - -=Vitaly=-   Работает так как сказал CodeWarrior, но я не инклу...   May 23 2007, 13:20
|- - CodeWarrior1241   Цитата(-=Vitaly=- @ May 23 2007, 09...   May 23 2007, 14:10
|- - -=Vitaly=-   Подскажите есть ли стандартная функция в EDK типа ...   May 24 2007, 09:52
|- - CodeWarrior1241   Цитата(-=Vitaly=- @ May 24 2007, 05...   May 25 2007, 12:07
|- - -=Vitaly=-   Ау   Jun 7 2007, 11:33
|- - CodeWarrior1241   Цитата(-=Vitaly=- @ Jun 7 2007, 07...   Jun 7 2007, 14:55
- - CodeWarrior1241   Цитатапочему в функцию Код#define SLAVE_STARTING...   May 24 2007, 12:40
- - -=Vitaly=-   Цитата(CodeWarrior1241 @ May 24 2007, 15...   May 24 2007, 13:51


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:50
Рейтинг@Mail.ru


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