本帖最后由 ddllxxrr 于 2015-3-26 21:52 编辑
这个例程是测试MATRIX即混合矩阵
本例程的第一个测试是运行在without default master
第二个测试是运行在with last access master
象前几个例程一样,首先打开:
而这两个定义是在这里:martix.h
- /** \brief Matrix slave: default master type */
- typedef enum {
- MATRIX_DEFMSTR_NO_DEFAULT_MASTER = MATRIX_SCFG_DEFMSTR_TYPE(0),
- MATRIX_DEFMSTR_LAST_DEFAULT_MASTER = MATRIX_SCFG_DEFMSTR_TYPE(1),
- MATRIX_DEFMSTR_FIXED_DEFAULT_MASTER = MATRIX_SCFG_DEFMSTR_TYPE(2)
- } defaut_master_t;
并且用了滴答时钟记数看看哪个用时多。
- tatic uint32_t toggle_led_test(uint32_t ul_dly_ticks)
- {
- int32_t ul_cnt = 0;
- uint32_t ul_cur_ticks;
- ul_cur_ticks = g_ul_ms_ticks;
- do {
- ul_cnt++;
- #if SAM4CM
- ioport_toggle_pin_level(LED4_GPIO);
- #else
- ioport_toggle_pin_level(LED0_GPIO);
- #endif
- } while ((g_ul_ms_ticks - ul_cur_ticks) < ul_dly_ticks);
- return ul_cnt;
- }
最后在程序中转换主控制:
- /* First, test with Round-Robin arbitration without default master */
- puts("-- Test1: configure Round-Robin arbitration without default master. --\r");
- for (ul_slave_id = 0; ul_slave_id < MATRIX_SLAVE_NUM; ul_slave_id++) {
- #if (!SAM4E) && (!SAM4C) && (!SAM4CP) && (!SAM4CM)
- matrix_set_slave_arbitration_type(ul_slave_id,
- MATRIX_ARBT_ROUND_ROBIN);
- #endif
- matrix_set_slave_default_master_type(ul_slave_id,
- MATRIX_DEFMSTR_NO_DEFAULT_MASTER);
- }
- ul_cnt = toggle_led_test(1000);
- printf("Led toggled %ld times in one second\n\r", (long)ul_cnt);
- /* Second, test with Round-Robin arbitration with last access master */
- puts("-- Test2: configure Round-Robin arbitration with last access master. --\r");
- for (ul_slave_id = 0; ul_slave_id < MATRIX_SLAVE_NUM; ul_slave_id++) {
- #if (!SAM4E) && (!SAM4C) && (!SAM4CP) && (!SAM4CM)
- matrix_set_slave_arbitration_type(ul_slave_id,
- MATRIX_ARBT_ROUND_ROBIN);
- #endif
- matrix_set_slave_default_master_type(ul_slave_id,
- MATRIX_DEFMSTR_LAST_DEFAULT_MASTER);
- }
- ul_cnt = toggle_led_test(1000);
- printf("Led toggled %ld times in one second\n\r", (long)ul_cnt);
运行的结果如下:
|