Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9XXXXX-S3E
АЦП
Evgeny
Добавлено 19.08.2010 13:19
0
Сообщение: 1
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Прошу помощи у работавших ADC этой платы. Настраиваю вроде все по даташиту, но ни в какую не запускается преобразование - весит без EOC и все тут. Код в принципе Linux-овский, но суть проблемы явно в логике работы АЦП, т.к. отладочный вывод демонстрирует, что пишу по "правильным" адресам. Еще я не оч разобрался как лучше задавать Start Up и Sample&Hold промежутки, может в этом и вся проблема.
Код

/*
* "AT91 ADC" kernel module
*
* Evgeny Startsev <slayer-gurgen@yandex.ru>
*
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/delay.h>
#include <mach/at91_adc.h>
#include <linux/platform_device.h>
#include <asm/io.h>
#include <mach/gpio.h>

#define ADC_BASE 0xFFFE0000
struct resource *res;
void __iomem *addr;

static int __init
hello_init(void)
{
printk("Hello, world!\n");
res = request_mem_region(ADC_BASE, 0xffff, "Mymem");
addr = ioremap(res->start, 0xffff);
at91_set_B_periph(AT91_PIN_PC0, 0);
__raw_writel(AT91_ADC_SWRST, addr + AT91_ADC_CR);
__raw_writel(AT91_ADC_LOWRES|
AT91_ADC_PRESCAL_(15)|
AT91_ADC_STARTUP_(0)|
AT91_ADC_SHTIM_(2000),
addr + AT91_ADC_MR);
char str[16];

/*Debug*/
sprintf(str, "Before %d\n", __raw_readl(addr+AT91_ADC_CHSR));
printk(str);

__raw_writel(1, addr + AT91_ADC_CHER);
__raw_writel(0xFFFF, addr + AT91_ADC_IDR);//no irq

/*Debug*/
sprintf(str, "After %d\n", __raw_readl(addr+AT91_ADC_CHSR));
printk(str);

__raw_writel(AT91_ADC_START, addr + AT91_ADC_CR);
while(!(__raw_readl(addr+AT91_ADC_SR) & 1)){
}
sprintf(str, "%d", __raw_readl(addr+AT91_ADC_LCDR));
printk(str);
return 0;
}


module_init(hello_init);


static void __exit
hello_exit(void)
{
printk("Goodbye, world!\n");
release_mem_region(ADC_BASE, 0xffff);
at91_set_GPIO_periph(AT91_PIN_PC0, 0);
}

module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Evgeny Startsev <slayer-gurgen@yandex.ru>");
MODULE_DESCRIPTION("ADC module");
MODULE_VERSION("1");


P.S. Может джамперы какие еще требуются? Я назначение всех не нашел почему-то.
Спуститься к концу Подняться к началу
Персональная информация
Strijar
Добавлено 19.08.2010 15:58 Сообщение: 2
Strijar
Ранг
5

Группа: Клиенты
Пункты: 1618
Регистрация: 21.04.2009
Пол: Мужчина
Поищите в сети файл at91adc.c - он и на этом форуме проскакивал. Это рабочий драйвер для обоих каналов.
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 20.08.2010 08:09 Сообщение: 3
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Спасибо, нашел, драйвер правда допиливать надо. Но уже что-то.
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 20.08.2010 09:18 Сообщение: 4
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Драйвер гадость какую-то выводит. Похоже на выводе не обнуленной памяти. Встречаются обрывки сообщений ядра или что-то в этом роде среди всей каши.
Спуститься к концу Подняться к началу
Персональная информация
Evgeny
Добавлено 23.08.2010 10:28 Редактировалось 23.08.2010 10:29 Сообщение: 5
Evgeny
5

Пункты: 836
Регистрация: 12.07.2010
Из: Челябинск
Я разобрался со своим драйвером. Оказывается в ARM есть такая штука, как PMC O_o ). А мужики то не знают. Таким образом синхронизации АЦП от MCK банально не было.
Проще всего это сделать с помощью готовых средств ядра Linux, как, например, в драйвере at91adc.c
Код

...
at91adc_clk = clk_get(NULL, // Device pointer - not required.
"adc_clk"); // Clock name.
clk_enable(at91adc_clk);
...

Хотя можно вручную задавать биты PMC.
После сих действий АЦП получить свою законную синхронизацию).
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9XXXXX-S3E