MM32SPIN2x 늙CMCU������ɫ:Ӳ���������cӲ��
��һ�¹�(ji��)���ѽ�(j��ng)�̴�����ʹ��MM32SPIN2x��PWM���������ƹ��ܣ����¹�(ji��)���c���һ������Ӳ����������Ӳ���_������
�������_���Ƿdz����ĕr�g���\�㣬����늙C�����㷨�����˳�����ƽ�����\����늙C�\����ʹ���l���^�ߡ��������MCU�Ĺ���Ч����MM32SPIN2x�˃�(n��i)ǶӲ��32bitӲ����������32bitӲ���˷��������Ԅӈ�(zh��)���з�̖��32λ����(sh��)�˳������_��̖�\����Ӳ���\���������ˑ�(y��ng)�ó����Ч�ʣ��p���˴��a�\���������ܛ�����������ض����}Ӌ���ٶȸ��죬λ��������
����ʹ��һ���������ʹ��Ӳ����������Ӳ���_���M���\����
Ӳ��������Ԫ��������32λ�Ĵ������Ă���(sh��)��(j��)�Ĵ����քe�鱻����(sh��)������(sh��)���̺�����(sh��)���Լ�һ�����ƼĴ�����һ����B(t��i)�Ĵ�������ʹ�Õr���ȴ��_Ӳ���������r�ʹ�ܣ�Ȼ�����ÿ��ƼĴ���(HWDIV_CR)�x���Ƿ�ʹ�ܳ�������Д���Пo��̖������Ȼ����������(sh��)�Ĵ����ͳ���(sh��)�Ĵ����Ќ��딵(sh��)��(j��)��ÿһ�Ό������(sh��)�Ĵ��������Ԅ��|�l(f��)�����\�������\��Y(ji��)�������Y(ji��)�������뵽�̺�����(sh��)�Ĵ����������\��δ�Y(ji��)��ǰ�x�̼Ĵ���������(sh��)�Ĵ������ߠ�B(t��i)�Ĵ������x����������ͣ��ֱ���\��Y(ji��)���ŕ������\��Y(ji��)�����e�����������(sh��)���㣬���a(ch��n)������Д���־λ���Ĵ���Ԕ�����xՈ����MM32SPIN2x_p�Ñ��փԡ�
Ӳ����������ʼ���������£�
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_HWDIV, ENABLE); //ʹ�ܳ������r�
HWDIV->DIVCON |= (DIV_UNSIGN ); //�o��̖��������ʹ�ܳ����Д�
������CӲ����������Ч������������(sh��)�зքeʹ��Ӳ����������ܛ���������M��16�γ����\������ʹ��while�Ǟ��˱�������ָ��ռ�Õr�g��
������(sh��)���£�
u32 DVD_data[32] = {
0x12345678,0x9876554 ,0x9822346 ,0x98734662,
0x000001 ,0xFFFFFFFF,0x11111111,0x22222222,
0x33333333,0x78645323,0x4399039 ,0x4367464 ,
0x42345678,0x9873554 ,0x9822346 ,0x98734662,
0x100001 ,0x1FFFFFFF,0x11511111,0x22422222,
0x53333333,0x78645323,0x4399039 ,0x4367464 ,
0x140001 ,0x11FFFFFF,0x12111111,0x29422222,
0x53333333,0x78644323,0x4369039 ,0x4767464 ,
};
u32 DVS_data[32] = {
0x11,0x22,0x33,0x44,
0x55,0x66,0x77,0x88,
0x99,0xaa,0xbb,0xcc,
0xdd,0xee,0xff,0xee,
0xdd,0xcc,0xbb,0xaa,
0x99,0x88,0x77,0x66,
0x55,0x44,0x33,0x22,
0x11,0x22,0x33,0x44,
};//����(sh��)��(sh��)�M
u32 result[32];
int main (void)
{
u32 i ;
IO_Init();
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_HWDIV, ENABLE);
HWDivider_UnsignInit();
while(1)
{
GPIOB->ODR ^= 1<<5;
GPIOB->ODR ^= 1<<5;
//Ӳ���������\��
SET_HWDivider(DVD_data[0],DVS_data[0]);
result[0] = GET_HWDivider;
SET_HWDivider(DVD_data[1],DVS_data[1]);
result[1] = GET_HWDivider;
SET_HWDivider(DVD_data[2],DVS_data[2]); result[2] = GET_HWDivider;
SET_HWDivider(DVD_data[3],DVS_data[3]);
result[3] = GET_HWDivider;
SET_HWDivider(DVD_data[4],DVS_data[4]);
result[4] = GET_HWDivider;
SET_HWDivider(DVD_data[5],DVS_data[5]);
result[5] = GET_HWDivider;
SET_HWDivider(DVD_data[6],DVS_data[6]);
result[6] = GET_HWDivider;
SET_HWDivider(DVD_data[7],DVS_data[7]);
result[7] = GET_HWDivider;
SET_HWDivider(DVD_data[8],DVS_data[8]);
result[8] = GET_HWDivider;
SET_HWDivider(DVD_data[9],DVS_data[9]);
result[9] = GET_HWDivider;
SET_HWDivider(DVD_data[10],DVS_data[10]);
result[10] = GET_HWDivider;
SET_HWDivider(DVD_data[11],DVS_data[11]);
result[11] = GET_HWDivider;
SET_HWDivider(DVD_data[12],DVS_data[12]);
result[12] = GET_HWDivider;
SET_HWDivider(DVD_data[13],DVS_data[13]);
result[13] = GET_HWDivider;
SET_HWDivider(DVD_data[14],DVS_data[14]);
result[14] = GET_HWDivider;
SET_HWDivider(DVD_data[15],DVS_data[15]);
result[15] = GET_HWDivider;
GPIOB->ODR ^= 1<<5;
GPIOB->ODR ^= 1<<5;
i = 1000;while(i--);
GPIOB->ODR ^= 1<<5;
GPIOB->ODR ^= 1<<5;
//ܛ���������\��
result[0] = DVD_data[0]/DVS_data[0];
result[1] = DVD_data[1]/DVS_data[1];
result[2] = DVD_data[2]/DVS_data[2];
result[3] = DVD_data[3]/DVS_data[3];
result[4] = DVD_data[4]/DVS_data[4];
result[5] = DVD_data[5]/DVS_data[5];
result[6] = DVD_data[6]/DVS_data[6];
result[7] = DVD_data[7]/DVS_data[7];
result[8] = DVD_data[8]/DVS_data[8];
result[9] = DVD_data[9]/DVS_data[9];
result[10] = DVD_data[10]/DVS_data[10];
result[11] = DVD_data[11]/DVS_data[11];
result[12] = DVD_data[12]/DVS_data[12];
result[13] = DVD_data[13]/DVS_data[13];
result[14] = DVD_data[14]/DVS_data[14];
result[15] = DVD_data[15]/DVS_data[15];
GPIOB->ODR ^= 1<<5;
GPIOB->ODR ^= 1<<5;
i = 1000;while(i--);
}
}
Ӳ���������M��16�γ����\���Õr6.52us(96MHz)��
�D1 Ӳ��������32�γ����\��
ܛ���M��32�γ����\���Õr42.29us(96MHz)��
�D2 ܛ��32�γ����\��
�_���\����늙C��������Ҳ�dz���Ҋ������ʸ���ϳɺ͞V�����֡�MM32SPIN2xϵ���Ԏ�Ӳ���_����֧��32λ�o��̖����(sh��)���_ƽ����
Ӳ���_��������1��32λ���_���Ĵ�����1��16λ��ƽ�����Ĵ��������ǟo��̖����(sh��)��ÿһ�Ό��뱻�_���Ĵ��������Ԅӳ����_���\�㣬���\��Y(ji��)�������Y(ji��)�������뵽ƽ�����Ĵ�����������ڽY(ji��)��ǰ�xƽ�����Ĵ������x����������ͣ��ֱ���Y(ji��)���ŷ����\��Y(ji��)����
Ӳ���_���������ØO�了�Σ�ֻ����_Ӳ���_�����ĕr犺������\��r���뱻�_����(sh��)���ɡ�ܛ���\��ʹ��C�Z���Ԏ���math.h�е�sqrt()�_ƽ������(sh��)��
u32 HWROOT_data[32] = {
0x12345678,0x9876554 ,0x9822346 ,0x98734662,
0x000001 ,0xFFFFFFFF,0x11111111,0x22222222,
0x33333333,0x78645323,0x4399039 ,0x4367464 ,
0x42345678,0x9873554 ,0x9822346 ,0x98734662,
0x100001 ,0x1FFFFFFF,0x11511111,0x22422222,
0x53333333,0x78645323,0x4399039 ,0x4367464 ,
0x140001 ,0x11FFFFFF,0x12111111,0x29422222,
0x53333333,0x78644323,0x4369039 ,0x4767464 ,
};//���_����(sh��)��(sh��)�M
u32 result[32]; //�̺�����(sh��)
int main (void)
{
u32 i ;
IO_Init();
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_HWROOT,ENABLE);
while(1)
{
GPIOB->ODR ^= 1<<5;
GPIOB->ODR ^= 1<<5;
//Ӳ���_���\��
HWROOT->SQR = HWROOT_data[0];
result[0] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[1] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[2] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[3] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[4] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[5] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[6] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[7] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[8] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[9] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[10] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[11] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[12] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[13] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[14] = HWROOT->ROOT;
HWROOT->SQR = HWROOT_data[0];
result[15] = HWROOT->ROOT;
GPIOB->ODR ^= 1<<5;
GPIOB->ODR ^= 1<<5;
i = 1000;while(i--);
GPIOB->ODR ^= 1<<5;
GPIOB->ODR ^= 1<<5;
result[0] = sqrt(HWROOT_data[0]);//ܛ���_���\��
result[1] = sqrt(HWROOT_data[1]);
result[2] = sqrt(HWROOT_data[2]);
result[3] = sqrt(HWROOT_data[3]);
result[4] = sqrt(HWROOT_data[4]);
result[5] = sqrt(HWROOT_data[5]);
result[6] = sqrt(HWROOT_data[6]);
result[7] = sqrt(HWROOT_data[7]);
result[8] = sqrt(HWROOT_data[8]);
result[9] = sqrt(HWROOT_data[9]);
result[10] = sqrt(HWROOT_data[10]);
result[11] = sqrt(HWROOT_data[11]);
result[12] = sqrt(HWROOT_data[12]);
result[13] = sqrt(HWROOT_data[13]);
result[14] = sqrt(HWROOT_data[14]);
result[15] = sqrt(HWROOT_data[15]);
GPIOB->ODR ^= 1<<5;
GPIOB->ODR ^= 1<<5;
i = 1000;while(i--);
}
}
Ӳ���_������(zh��)��16���_���\���Õr5.44us(96MHz)��
�D�� Ӳ���_��32���_���\��
ܛ����(zh��)��16���_���\���Õr238.22us(96MHz)��
�D�� ܛ��32���_���\��
�ɴ˿�Ҋ��Ӳ����������Ӳ���_���������\���ٶ�������MCUؓ�������ИO���@�������á�

����admin ����ĕr�g��2018-12-27