嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% H! `& c' i* L/ g1 U. F
Void UPP_TASK(Void)
5 _) W' A; q9 ?: }. Q( N) g* E- |
{
f) u" w+ V- S- E: @
8 ^$ C; i4 o8 P% }- p
int i,j,k,target_int_count=2;
5 s$ J) {/ M4 p! L6 A, G6 v& ?
char ch[2];
% |) l. w8 K- f8 v: J4 l
- B% k; z/ L6 j) v6 t6 L; y; O
; Q0 Z1 W( C- U( i* [$ d
8 {' [1 c% \, W, ]. V5 h
upp_interrupt_count = 0;
: V" ]3 g+ ]3 _; e
upp_error_count = 0;
7 Y* ^6 b7 J$ ?: }+ D' L
# ~- U1 z$ a5 u8 P) {4 C3 y$ @
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* ?" E c7 f- ]2 h, |
// Initialize data buffers
7 a8 v% M+ H5 i# P
for (i = 0; i < upp_frame_size; i++)
) K; C5 k9 b+ Z% U. D: p2 R Y; N9 e7 e
{
8 e8 u- O8 j! j" u! v. R
upp_buffer_b
=i;
6 P. `, C' z( O( c) J5 y
upp_buffer_a
= 0xDEAD;
8 r. Z/ h F, Y6 y" Q' B
}
/ E4 x2 e3 k+ ^1 V1 u
0 ~! s9 G' @; @1 l1 B
//for(i=0;i<1024;i++)
! j2 R/ c K7 v7 e1 z
// temp
=0;
! g) n0 ^9 L$ J' n) Z R
* r: o4 ^+ E# ` w
//UPPReset();
* \2 ~ g8 @4 {6 W* T( m. F: y
/*启动UPP DMA传输*/
8 W; z) g4 y6 Z2 [1 ~# {# c
UARTPuts("upp_prog_dma_i\n",-2);
, }( v n* y, g9 M
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: s& L$ N" L! c M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 d& F5 s, h% t$ }. Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- j, P8 |3 u- u: F' o% G
! T T, Y# x, Q, d( T6 M9 ~
UARTPuts("upp_prog_dma_i\n",-2);
8 I( K! g# [. N+ Y; m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 G1 F$ O; {, h8 b
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 i1 B! c0 f( T
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 b& K* E& G/ Z4 u
# A* D" G& r3 v+ K5 Z9 U( b
/*等待UPP传输完毕*/
6 T3 Y" C7 d3 c
//i=0;
5 C {7 ^ J& |/ B& w4 I, T; u
//j=0;
0 p# W% {5 K( ?: D+ H
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 }) t: ^6 X2 I+ `% e7 F
{
( X) R: F& T; H9 V+ f
/* 测试UPP传输的同时操作普通DDR数据
! c2 P5 v" I0 T8 o+ e! ?3 G M4 u' o
temp
=i;
0 }! n, F/ L9 C. t5 C" o8 p
i++;
' R/ g* b; L" p3 ~: r3 J* Z
if(i==1024)
1 B' X, s" x- a; z1 R* O
{
. e* Z0 V2 m5 Q& F9 E* a
i=0;
% U/ e: x% {' N& k
j++;
3 g: S! N5 G1 o, k8 c. {
}
9 R: {+ i1 o9 {2 I" Z
*/
2 v0 d/ ~$ i' a% d' t
2 R3 r4 I; k: z* a! B/ L3 e
asm(" nop");
+ [ [! r# R8 |* g0 c
- h9 i/ V) e9 S3 d. q5 j
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# D+ C. a1 R% ]) o/ @1 R: _) ]
}
+ o8 ^$ N+ @9 i) x
- L' {* @! U9 E- i, ^3 W
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ U* W( k# D a) @
//UARTprintf( "i=%d\n",i);
$ O# i7 t. x5 Q# Y5 T* j5 I, ^6 g
//UARTprintf( "j=%d\n",j);
6 T4 T7 }% b1 P7 ]+ y- E0 h! f
UARTPuts("Data mismatch in buffers.\n",-2);
; c$ M. }6 D' |
if (upp_interrupt_count == 2 && upp_error_count == 0)
( Q8 K1 x# \7 W; J
{
2 ^& |" Y- n- `
for (i = 0; i<upp_frame_size; i++)
6 C4 S, r3 Y0 I+ j
{
( N; g( G6 g* |
if (upp_buffer_a
!= upp_buffer_b
)
h2 F! t' F- G8 a% x
{
4 |; Z3 R4 V' n7 n4 z, j. g( t& N
upp_error_count++;
( d5 ^5 Z5 J1 P( Y v
}
( d6 t M( | n: I, N3 b) W
}
6 X$ a. h/ d! w$ z- d6 Y0 e
}
& O. K; J# r/ }) m
, z P7 b W. a; B8 G- G
/* 报告通信结果*/
: Y2 I5 G8 k! S' `
if(upp_error_count != 0)
5 \- C4 x" u* t1 `7 R" ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! {9 k W/ Z4 G
else
/ V, S4 d8 u# a2 `9 ]( Z
UARTPuts("uPP transfers complete!\n",-2);
/ A' q# y6 v1 w
3 L) H3 v0 u! }' d/ J- J) }: F
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. f) L$ W7 x3 F7 ?! w( j5 M% d
UARTGets(ch,2);
: w6 n. F, v! B% _8 ^0 w
UARTPuts("\n", -2);
* ] `7 {# ?, n& h* H Y ~+ {1 a
9 k+ z/ {/ F P! W: `4 [
if(ch[0] == 'y')
! y8 O, c) X6 s# e4 I2 c: j1 q" E
{
% @+ G: J2 p- R4 X0 H3 ] n
/*打印全部读到的数据*/
7 D6 o& b2 m* m; C0 v( F* e
for(i=0; i<upp_frame_size; )
5 d) m& _& y9 S* {" P
{
8 g9 R( _, P. d R7 m: D. ]
for(j=0; j<5; j++)
+ m# w* c' z* M( n- P
{
' o+ }, z2 a/ v/ R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ d5 L2 A+ ]9 r B% E8 A& ^
i++;
2 ?: N( O, A @+ [* q! V! V9 _0 Z/ x
//if(i >= 4096)
. `% S" @( W3 |1 C2 D1 H5 a
// break;
; K: @# M; \% n9 e* i
% }" d& v, S+ A* |
}
; r7 N- S5 \0 P; \5 ?
UARTPuts("\n",-2);
! l! n' a/ z* o" S
}
9 g6 L' u* Z! E6 N7 W
}
; h* b6 W7 s {& V1 Z) Z4 L+ [
4 x; q2 e$ B/ H; S& x
}
* Q0 @. G- f: f, J( E" y6 G! [2 w( @
+ h) f2 y! [2 X+ O n F$ L* `
: K- R- p' u. W- H
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ ^4 j1 L) d$ K% G5 p
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- r4 w1 q: ^9 B% q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4