嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* X0 [$ E! G) B. T
Void UPP_TASK(Void)
, H- \ ~' b* u! d7 P/ d
{
# [: p0 M9 V& g9 L5 V- X) h
4 s) |, _/ P& h: v' N
int i,j,k,target_int_count=2;
- u/ n$ i: `3 p$ Z2 S0 O9 O9 F
char ch[2];
6 c, i" T8 W0 V4 B
% Z0 B% i# V2 |5 \9 P& ?
/ I( J) _. |/ V9 I* u# ^- D( T/ O# K
; ^% n9 X" e0 L/ N% n
upp_interrupt_count = 0;
% A% y8 F. X2 _" ]6 P
upp_error_count = 0;
1 M( ^! k2 p. o" C* c3 O- j* D Y
/ H- `! s& t; F' ~4 ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, U, n8 T7 h) @9 C, H5 S( }; A0 k. H
// Initialize data buffers
1 Z+ C: d7 f; U9 K; g- i
for (i = 0; i < upp_frame_size; i++)
3 ~, y! M: `$ |9 j. F' w" W
{
/ m$ V! s( c* y! ~2 g( z, z7 _* r
upp_buffer_b
=i;
/ u' e6 q% K D4 S. t
upp_buffer_a
= 0xDEAD;
4 r4 z ]1 [) i, v" B2 {
}
& s- q- \# W5 Z: n; J! w
' t/ Z+ | U5 \- k* a0 [
//for(i=0;i<1024;i++)
/ `, I T! c) g/ R' d
// temp
=0;
9 X. a3 T0 x/ E
- J- u) u) u( h5 p4 D* {
//UPPReset();
; j" n6 z# \! S3 w% p2 q% [$ K0 j
/*启动UPP DMA传输*/
- P. E5 Y- ]% E- O1 A( |1 y6 P' |
UARTPuts("upp_prog_dma_i\n",-2);
. Q, \! j4 a6 N* G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& L$ }; [7 ^2 A1 g0 `
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- Q7 N' o+ t+ Q( T" ?# M
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, m. z4 e+ N# K# s5 Y* M
- k9 Y/ D% h. j6 y' N! X+ [
UARTPuts("upp_prog_dma_i\n",-2);
( h- i! {: w5 H1 A
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 ]- l8 d8 A4 h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% J4 e! c! P% b0 Y( j' S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% A$ r: i# h. @6 P7 ?
! m N6 J z# R3 w
/*等待UPP传输完毕*/
7 f2 ?1 |" O3 E' I
//i=0;
5 S$ {2 N. b( a2 m# W- F$ f6 d3 {0 Q: u$ t
//j=0;
. X" o1 ?. w8 _) x( y3 N" M
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# ?" s j' B8 u' O: M
{
* N3 R! O- |6 V! T, m2 V& _# G4 H6 p
/* 测试UPP传输的同时操作普通DDR数据
7 w+ b3 y8 n. ^* ]; v. k2 G
temp
=i;
3 ~2 T4 f2 g* H( c) Y7 n
i++;
# @ k* u I5 z1 M% K) `
if(i==1024)
0 A) ?' Y& u' F
{
; O/ R5 V3 S# |* \1 r$ d% r" ~
i=0;
0 l" |8 H+ Q3 {% x9 x$ u
j++;
5 ?! k) m5 P, \+ C! P
}
9 \+ A* l7 V/ R5 T/ R) G6 M, k
*/
; a: G- f$ Z: c$ n" [( y( X# L
, c: d' J1 x) r! Q9 t6 `
asm(" nop");
# M# Q4 l. } i+ W
$ K# ?) X8 k# Y+ ?. `
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ c$ p8 i! H( A
}
1 D' B" a% h* e, m& t/ A
, D3 E" S2 c7 e3 v$ |9 d
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. } F2 N+ r/ I0 W
//UARTprintf( "i=%d\n",i);
2 n8 @; Y$ e* f+ }1 Z1 _8 _
//UARTprintf( "j=%d\n",j);
/ d6 q6 ` G, L1 h+ |1 I
UARTPuts("Data mismatch in buffers.\n",-2);
7 F& V4 h. b& M% n: k0 M# u+ K1 z
if (upp_interrupt_count == 2 && upp_error_count == 0)
" U0 e% h$ a; _% w3 ~" K' w4 r
{
4 A" ~+ e, o# w
for (i = 0; i<upp_frame_size; i++)
2 V9 ]7 R4 f6 Z2 ?: ~9 ?: I
{
t" X: `' l3 m- a
if (upp_buffer_a
!= upp_buffer_b
)
7 E: a1 V! K) X
{
" c/ w8 W; o/ S" ?$ \ W
upp_error_count++;
$ I& L$ Q2 K0 Y6 N x
}
) x# e& h* ^; t8 S$ h- s" D' W' C
}
2 w* Y4 `7 k6 M
}
* p9 u7 w( }1 w2 \; x
6 T4 Z) H3 o; [
/* 报告通信结果*/
) B) b% Y+ O) v; I
if(upp_error_count != 0)
7 K2 t4 d; s' R3 M! B( C4 }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: D; r/ z1 B K; Q; g
else
6 S; V# w3 t& _# C6 f" w# L* B/ d
UARTPuts("uPP transfers complete!\n",-2);
0 Q' c3 @3 y- q% y0 w9 F5 h% Y) a
: I2 O7 }5 T, \6 f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 j1 }% C6 j" t I% v* m1 z- q& z
UARTGets(ch,2);
- Z* Z9 f4 {' ~9 Y) l
UARTPuts("\n", -2);
! t7 m" e% I3 c6 b5 O
; C) ?( I( c5 c% `( M
if(ch[0] == 'y')
8 r9 W6 U: l* R0 }
{
' [! _: c) V2 u9 o- h* ~- c: E
/*打印全部读到的数据*/
" ^* Q' I. ?+ @) g z: h0 a$ M# U
for(i=0; i<upp_frame_size; )
; ` I4 r5 V, g3 \4 j8 @' j9 F! o; i( _
{
3 k3 L6 x& V/ L x/ k2 X. t9 T
for(j=0; j<5; j++)
2 ~0 H6 }4 p0 R" r
{
3 R2 H9 T$ _) O' Q8 |4 g- |4 e+ j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* s1 \% B0 c# N" r/ c3 y
i++;
) m, [! F6 A3 P4 n5 K! j1 ?
//if(i >= 4096)
0 q h" H0 Z- u5 S: A) e" z
// break;
, p- c K5 _3 i8 [
+ n- L, K$ p9 P, `7 ]5 Q
}
1 L% H2 b8 Y1 h
UARTPuts("\n",-2);
7 \ P8 @ K4 M
}
4 r" ]+ _0 M+ a- x
}
9 y' \$ x5 J! H! d4 k. v
- S! ?& V) o% A, R/ u
}
* J4 D' c5 a4 P
, b) [9 N1 t( u% Z: z, v8 {9 o
$ A9 V8 {6 h! s9 }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ @( e9 R N8 h. Z1 q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 M9 ` N8 w: V+ u5 o# \# b
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4