Цитата(-=Vitaly=- @ May 24 2007, 05:52)

Подскажите есть ли стандартная функция в EDK типа XIic_SelfTest, но которая выдавала бы на ножки данные. А то у меня осциллограф молчит, XIic_SelfTest выдает,что все ок.
Выводы IIC вывел на ножки плиса с внутренним пуллапом.
У меня не задействован I2C self-test. Я заметил пару, в моем понимании, ошибок:
1. В XIic_SetOptions (&MY_Iic,XIIC_CR_ENABLE_DEVICE_MASK); строке, функция из xiic.h, но definition XIIC_CR_ENABLE_DEVICE_MASK из xiic_l.h. Они не совместимы, options от одной не будут работать как argument для другой.
2. Вы не устанавливаете адрес slave к которому Вы высылаете 0х55. Как же I2C будет без этого?
Я выставляю адрес slave-a каждый раз когда что либо пересылаю, естессно. Посмотрите комменты к функции XIic_SetAddress of the xiic.c file. Там написано почему имея XI2C_ADDRESS_TO_SEND = 0х01, надо иметь AddressType тоже. Это сваязано с установлением причины изминения адреса, т.е. если XIic_SetAddress вызывается опять, AddressType будет обозночать или то что Microblaze стал теперь slave, или что он продолжает быть master. Еще в xiic.h это поясняется:
Код
/* The following address types are used when setting and getting the addresses
* of the driver. These are mutually exclusive such that only one or the other
* may be specified.
*/
/** bus address of slave device */
#define XII_ADDR_TO_SEND_TYPE 1
/** this device's bus address when slave */
#define XII_ADDR_TO_RESPOND_TYPE 2
Собственно, вот сам код, попробуйте...
Код
#include "xparameters.h"
#include "xiic.h"
#include "xiic_l.h"
#include "xbasic_types.h"
#include "xstatus.h"
#define XI2C_ADDRESS_TO_SEND 0x01
void IIC_init(XIic MY_Iic)
{
Xuint32 Iic_status;
XIic_Initialize (&MY_Iic, XPAR_OPB_IIC_0_DEVICE_ID);
//XIic_SetOptions (&MY_Iic,XIIC_CR_ENABLE_DEVICE_MASK);
XIic_Start(&MY_Iic);
/*
Iic_status= XIic_SelfTest(&MY_Iic);
if(Iic_status== XST_SUCCESS){
xil_printf("IIC selftest succesful \r\n");
}
else{
xil_printf("IIC some errors detected \r\n");
}
*/
}
void main(void)
{
while(1)
{
XIic_SetAddress(&MY_Iic, XII_ADDR_TO_SEND_TYPE, XI2C_ADDRESS_TO_SEND);
XIic_MasterSend (&MY_Iic,0x55,1);
}
}