* ��ʼ����ʱ��������ʼ�ж϶�ʱ * @timer_info ��ʱ���Ͷ�ʱʱ����Ϣ * @hrc ���ж� lrc ���ж� Ϊ1��Ϊ0�ر� */
| 255 | * @hrc ���ж� lrc ���ж� Ϊ1��Ϊ0�ر� |
| 256 | */ |
| 257 | void timer_int_init(timer_info_t *timer_info, int hrc, int lrc) |
| 258 | { |
| 259 | unsigned int timer_reg_base = 0; // �Ĵ�������ַ |
| 260 | unsigned long timer_clk = 0; // Ӳ����ʱ����ʱ�� |
| 261 | unsigned long h_value, l_value; |
| 262 | unsigned int ctrl = 0; // ���ƼĴ����еĿ�����Ϣ |
| 263 | |
| 264 | // ���� |
| 265 | if (NULL == timer_info) |
| 266 | { |
| 267 | return ; |
| 268 | } |
| 269 | |
| 270 | /* |
| 271 | * �Ѷ�ʱʱ�任��Ϊ��������ֵ |
| 272 | * ������ֵ = ��ʱ����ʱ�� * ��ʱʱ��(��λns) / 1000000000 |
| 273 | * ��о1c�Ķ�ʱ��ʱ��ΪAPBʱ�ӣ��ﵽ126Mhz�� |
| 274 | * Ϊ���������̷����������������ֶ��Ż�����ļ���ʽ��Ҳ���Բ��ø������� |
| 275 | */ |
| 276 | timer_clk = clk_get_apb_rate(); |
| 277 | l_value = (timer_clk / 1000000) * (timer_info->time_ns / 1000); // ��1000000000���Ϊ1000000��1000 |
| 278 | l_value = MIN(l_value, TIMER_COUNTER_MAX); |
| 279 | h_value = (timer_clk / 1000000) * (timer_info->time_h_ns / 1000); // ��1000000000���Ϊ1000000��1000 |
| 280 | h_value = MIN(h_value, l_value); |
| 281 | |
| 282 | // ���ƼĴ�����Ϣ |
| 283 | ctrl = (lrc << LS1C_PWM_INT_LRC_EN) |
| 284 | | (hrc << LS1C_PWM_INT_HRC_EN) |
| 285 | | (0 << LS1C_PWM_CNTR_RST) |
| 286 | | (0 << LS1C_PWM_INT_SR) |
| 287 | | (1 << LS1C_PWM_INTEN) |
| 288 | | (1 << LS1C_PWM_SINGLE) |
| 289 | | (1 << LS1C_PWM_OE) |
| 290 | | (1 << LS1C_PWM_CNT_EN); |
| 291 | |
| 292 | // ���ø����Ĵ��� |
| 293 | timer_reg_base = timer_get_reg_base(timer_info->timer); // ��ȡ�Ĵ�������ַ |
| 294 | reg_write_32(0, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_HRC)); |
| 295 | reg_write_32(l_value--, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_LRC)); |
| 296 | reg_write_32(h_value--, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_HRC)); |
| 297 | reg_write_32(0, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_CNTR)); |
| 298 | reg_write_32(ctrl, (volatile unsigned int *)(timer_reg_base + LS1C_PWM_CTRL)); |
| 299 | |
| 300 | return ; |
| 301 | } |
nothing calls this directly
no test coverage detected