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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Какая максимальная частоты вых MATCH0.0, LPC2103
asen
сообщение Jun 26 2009, 14:00
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



Вообщем настроил проц работает на 64 МГц таймер на той же частоте (APBDIV |=0x01; и T0PR = 0; ) частота совпадений стоит 8МГц а нога которая отвечает за матч дергаеться с частотой 3.25МГц что к чему прерывание по совподенияю не настроенно и вообще все прерывания запрещены ! Что это придел чтоль ?? не гуд силгал на ноге нужен чтобы в фоне тактировать внешню микросхемму smile.gif) Про дрыганье софтовое я читал и вкурсе но мне нужно чтоб это не кушала все ресурсы проца ! Что такое не возможно ответьтте плиззsmile.gif
Go to the top of the page
 
+Quote Post
meister
сообщение Jun 26 2009, 14:17
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(asen @ Jun 26 2009, 18:00) *
Вообщем настроил


Покажите настройку таймера.
Go to the top of the page
 
+Quote Post
asen
сообщение Jun 27 2009, 01:20
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



Вот код
/**************************CORE ARM7TDMI***********************************
#define OSCILLATOR_CLOCK_FREQUENCY 16000000
#define max_F_MUL 4
#define max_F_DIV 1
//**************************IO_PORT*****************************************
#define SCK_OUT 1<<4
#define MOSI 1<<6
#define MISO 1<<5
#define CLK_OUT 1<<17
#define LED 1<<18


//*****************SPI0*************************
#define SPI0_EN 1
#define SPI0_FCLK 10000
#define SPI0_MASTER 1

//*****************UART0************************
#define UART0_EN 1
#define UART0_BAUND 9600
#define VIC_UART0_bit (1 << VIC_UART0)

//***************TIMER0************************
#define TIMER0_EN 1
#define OVR_TMR0_F 8000000
#define VIC_TIMER0_bit (1 << VIC_TIMER0)


unsigned int processorClockFrequency(void){ //CCLK=14768000
//return real processor clock speed
return OSCILLATOR_CLOCK_FREQUENCY * (PLLCON & 1 ? (PLLCFG & 0xF) + 1 : 1);
//если (PLLCON & 1)=1 то возвращаем (OSCILLATOR_CLOCK_FREQUENCY*(PLLCFG & 0xf)+1) если PLL подключен
//иначе возвращаем (OSCILLATOR_CLOCK_FREQUENCY * 1)
//PLLCFG.0 - PLLCFG.4 - значения умножителя
}
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
unsigned int peripheralClockFrequency(void){
//VPBDIV - determines the relationship between the processor clock (cclk)
//and the clock used by peripheral devices (pclk)=3 686250
unsigned int divider;
switch (APBDIV & 3)
{
case 0: divider = 4; break;
case 1: divider = 1; break;
case 2: divider = 2; break;
}
return processorClockFrequency() / divider;
}
void F_Init(unsigned char f_mul) //ф-я рассчёта умножителя частоты ядра и делителя частоты периферии
{
//devide or multiplier
//here is calculate frecuence
PLLCFG_bit.MSEL = (f_mul)-1; //M - multiplier=fmul
PLLCFG_bit.PSEL = 0x0; //P - devider default =1
//set changes (require from architecture)
PLLFEED_bit.FEED = 0xAA;
PLLFEED_bit.FEED = 0x55;


//enable or connect PLL
//enable PLL
PLLCON_bit.PLLE = 1;
//set changes (require from architecture)
PLLFEED_bit.FEED = 0xAA;
PLLFEED_bit.FEED = 0x55;

//wait for PLOK (correct freq)
while(PLLSTAT_bit.PLOCK == 0){}

//connect PLL
PLLCON_bit.PLLC = 1;
//set changes (require from architecture)
PLLFEED_bit.FEED = 0xAA;
PLLFEED_bit.FEED = 0x55;
APBDIV |=0x01;
}
void PortInit(void) {
PINSEL0 = 0x0; //set first functionality of this pin
PINSEL1 = 0x0; //set first functionality of this pin
PINSEL0_bit.P0_3 = 2;
IODIR |= SCK_OUT;
IODIR |=MOSI;
IODIR |=MISO;
IODIR |=LED;
IODIR |=CLK_OUT;
IOCLR |=LED;

}
void InitTimer_0()
{
T0TCR = 0; // Disable timer 0.
T0TCR = 2; // Reset timer 0.
T0TCR = 0;
T0IR = 0xff; // Clear timer 0 interrupt line.
T0PR = 0; // :7
T0CTCR = 0;
T0MR0 = peripheralClockFrequency()/(2*OVR_TMR0_F);
T0MCR = 2; // Reset, stop and interrupt on MR0 (match register 0).

T0CCR = 0; // Capture is disabled.
T0EMR = 49; // No external match output.
T0TCR = 1; //запускаем таймер
}

void set_led (void)
{
// IODIR |= LED;
IOCLR |= LED;
// IOCLR |= CLK_OUT;
}

void clr_led (void)
{
IOSET |= LED;
// IOSET |= CLK_OUT;
}

int main()
{
setup_sys();
while (1)
{
set_led();
__delay_cycles(1000000);
clr_led();
__delay_cycles(1000000);
};
return 0;
}
Ниче не понимаю он вообще по своему созданию изночально может дергать с такой скоростью нет ??
Go to the top of the page
 
+Quote Post
meister
сообщение Jun 27 2009, 05:43
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(asen @ Jun 27 2009, 05:20) *
T0MR0 = peripheralClockFrequency()/(2*OVR_TMR0_F);


Надо так:
Код
T0MR0 = peripheralClockFrequency()/(2*OVR_TMR0_F) - 1;


Цитата(asen @ Jun 27 2009, 05:20) *
Ниче не понимаю он вообще по своему созданию изночально может дергать с такой скоростью нет ??


Настройте дергание ноги на 10кгц (чтобы точно), как настроите, настройте на 8мгц и узнаете.

Сообщение отредактировал meister - Jun 27 2009, 05:44
Go to the top of the page
 
+Quote Post
asen
сообщение Jun 27 2009, 09:25
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



Так с частотой до мегагерца все просто супер он максимальное что может нормально дергать это 3.25МГц так что то что предделитель не тот не обьясняет частота должна быть 3.8 примерно smile.gif ктото пробывал дергать этим выводом быстрей ?
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Jun 29 2009, 10:33
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



asen, вы пробовали посмотреть форму сигнала на ножке осциллографом? На что у вас нагружен этот выход?
Go to the top of the page
 
+Quote Post
etoja
сообщение Jun 29 2009, 11:21
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Для генерации выходного тактового сигнала можно использовать таймер в режиме ШИМ.
При этом максимальная выходная частота равна частоте процессорного ядра, делённой на четыре.

void initPWM(void)
{
PINSEL1 |= 0x00000400; //set pin P0.21 (PWM5)

PWMTCR = 0x0000002; //counter reset
PWMPR = 0x00000000; //prescaler - run at full speed (60MHz)
PWMMCR = 0x00000002; //Match Control - reset on PWMMR0 match
PWMPCR = 0x00002000; //Enable PWM5 pin (single edge)
}


void processCommand(void)
{
int tempInt;
tempInt = 2;
PWMTCR = 0x0000002; //counter reset
PWMMR0 = tempInt; //set period
PWMMR5 = tempInt / 2; //set PWM5 (P0.21) duty to 50%
PWMTCR = 0x00000009; //Enable counter and PWM
}

int main (void)
{
initPWM();
processCommand(); //if a command is ready, process the command
}
Go to the top of the page
 
+Quote Post
asen
сообщение Jun 29 2009, 11:43
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



Да с ШИМ попробую а в данный момент нагружен на резистор сопротивлением 1кОм фронты оч плохенькие сигнал почти пила получаеться sad.gif это не гуд ??
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Jun 29 2009, 12:21
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Цитата(asen @ Jun 29 2009, 15:43) *
Да с ШИМ попробую а в данный момент нагружен на резистор сопротивлением 1кОм фронты оч плохенькие сигнал почти пила получаеться sad.gif это не гуд ??


Ну раз "почти пила" то конечно не гуд laughing.gif
Если есть такая возможность - я бы попробовал поставить какой нибудь быстродействующий буфер между ножкой и нагрузкой, или просто транзистор полевой быстродействующий в виде ключа, и посмотреть сигнал уже после него.
Go to the top of the page
 
+Quote Post
asen
сообщение Jun 29 2009, 13:10
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



Врятли это мне кажеться эффект так как если бы имело место сказавшаяся емкость короткой линии ножки (если предположить ) то повышение входного сопротивления нагрузки еще более затянет фронт спад мне кажеться ! А с какой скоростью тактируеться защелка порта выходного кто нить знает у ЛПС ???
Go to the top of the page
 
+Quote Post
Abo
сообщение Jun 30 2009, 11:49
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 101
Регистрация: 9-01-06
Пользователь №: 12 967



Я вот так половину тактовой частоты периферии подаю на вывод 46
Код
  // Настраиваем входные и выходные сигналы
  PINSEL0 = (PINSEL0 & ~(0)) | 0x0;
  // Вывод 46-P0.16 как MAT0.2
  // Вывод 3-P0.21 как МАТ3.0
  PINSEL1 = (PINSEL1 & ~((3<<0)|(3<<2)|(3<<4)|(3<<6)|(3<<8)|(3<<10))) | ((2<<0)|(2<<6)|(2<<8)|(2<<10));

  // Настраиваем таймер 0 на выдачу сигнала SCK частотой 12,8 МГц - половина тактовой
  PCONP |= PCONP_PCTIM0;                // Подаем питание на таймер
  T0TCR   = 2;                          // Остановим и сбросим таймер
  T0CTCR  = 0;                          // Работа в режиме таймера
  T0PR    = 0;                          // Предделитель не используется - на таймер подается CCLK 25,6 МГц
  T0MR0   = 1;                          // Определяет период выходного сигнала
  T0MR2   = 1;                          // Определяет период выходного сигнала
  T0MCR   = T0MCR_MR0R;                 // Сброс по совпадению с MR0
  T0EMR   = 0;              
  T0CCR   = 0;                          // Запретить режим захвата по всем входам
  PWM0CON = 1<<2;                       // Разрешим генерацию PWM на выходе MAT0.2
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Jun 30 2009, 13:39
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Цитата(asen @ Jun 29 2009, 17:10) *
Врятли это мне кажеться эффект так как если бы имело место сказавшаяся емкость короткой линии ножки (если предположить ) то повышение входного сопротивления нагрузки еще более затянет фронт спад мне кажеться ! А с какой скоростью тактируеться защелка порта выходного кто нить знает у ЛПС ???


asen, при использовании FastGPIO и программном ногодрыгании можно получить на ножке частоту, от которой тактируется переферия - в том же мануале на LPC2103 есть пример с осциллограмой, где на ножку выводиться 15 МГц. Так что 8 МГц при аппаратном ногодрыгании от таймера я думаю он должен выдавать спокойно. Вот и Abo поделился примером с выводом достаточно высокой частоты.
Go to the top of the page
 
+Quote Post
asen
сообщение Jul 1 2009, 07:25
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



Незнаю почему но не на том способе с шим не на способе с МАТСH добиться нормальной амплетуды и и скорости нарастания сигнала не удалось незна почему smile.gif) Вы пробывали смотреть качество сигнала на ноге ??
Go to the top of the page
 
+Quote Post
meister
сообщение Jul 1 2009, 07:56
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(asen @ Jul 1 2009, 11:25) *
Вы пробывали смотреть качество сигнала на ноге ??


LPC2366, частота на таймер = 72мгц, частота на ногу = 8мгц, нагрузка - щуп осциллографа. в высокоомном режиме сигнал получается почти прямоуголный, с выбросами, в "низкоомном" режиме (1М) - круглая пила, период такой же. Кстати, для 8мгц, toggle должен идти на частоте 16мгц.
Go to the top of the page
 
+Quote Post
asen
сообщение Jul 1 2009, 10:38
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 513
Регистрация: 5-09-05
Из: Барнаул
Пользователь №: 8 220



А полосу осцила сказать можете ?? у нас toggle идет на частоте 8 МГц !
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:44
Рейтинг@Mail.ru


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