C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6006|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 }* N  O" e' dmain文件:. f2 n2 V0 Y! m8 U- E( f3 s) L6 i
interrupt void interrupt4(void)  ' n% s2 A: f# W5 B7 Z$ `/ U
{
" A1 b% {  ~& o' d3 v7 T  Uint32 sample;
8 h. t8 Y5 l$ G5 D8 \% Q( ]
7 {" `& W' C' c) _, A& w  sample = input_sample(); // read L + R samples from ADC, c: \! U' a) |
  output_sample(sample);   // write L + R samples to DAC 6 Z. i0 M0 e* _
  return;
2 r9 ?. v0 A9 x/ G8 C5 ~}
; ~5 z3 S# ~; S. I# \1 t" L5 ]4 \# u
int main( void )  X; y8 y5 A+ L3 _8 n! _
{) N( }$ A2 I5 L3 E
. ?: x  \# H: o0 x
    /* Initialize BSL */3 Z2 c6 d6 [: s- E/ S# j
    EVMC6747_init( );
$ [+ u3 @- P9 T, W/ a        /* Call evmc6747_intr function */2 M4 A2 c$ X2 Z& P) `4 o
    aic3106_init( );
8 [7 g* F7 {$ d, J' F; U        while(1);
7 W4 f* O# |2 I}, ?' T4 M0 K% ^% Q: Y( E5 I: f9 V6 I
+ ^( Q% q0 i" t! O, S

" l; y6 f. t0 f7 ^2 \& Gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 n% L0 H% s+ l6 j/* Initialize MCASP1 */  F% D. ]7 |6 |7 ?. D. ]" k  d
    mcasp = &MCASP_MODULE_1;
. ?, u0 b6 d0 L6 G, J: k, @    mcasp->regs->GBLCTL  = 0;       // Reset
% m& S# F' w0 x    mcasp->regs->RGBLCTL = 0;       // Reset RX
. e& G# g5 e  ^" l' X% E    mcasp->regs->XGBLCTL = 0;       // Reset TX/ T! F! E9 C- W5 R) l8 ~
    mcasp->regs->PWRDEMU = 1;       // Free-running, e; K' B( ~4 z. @8 w
   // configure McASP0 receive registers
5 ~4 g& z7 ]4 X. |, N    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ e0 t# }+ M4 {" s" V/ B    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ O) o# ~& q- y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 |+ b: c& B& u, ?5 K* d0 q, h    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 U8 E0 w5 q1 _* \) R. t$ Z( p0 G
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; N" d* \! @9 w; ]1 w9 c. v    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 |! m  E+ p3 k1 c2 K( M6 w& X    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* W2 i( p2 ]* p' |: U4 @) A  E1 e% x3 W) v    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 j  K9 h3 G: n, F$ o
  G: F4 _# v8 C! Q- `! R    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; G( p; o4 i6 c( v8 u3 \    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( J* ]! ?/ G; R2 N* P$ p
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ n; L! _0 S9 h/ X, O! H
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 h, E0 q" G* c7 H    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK! R+ K3 V0 E+ B* |
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 F0 Y; A4 O; ]    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' a. m( T# D7 w( \: t  ~# l& a    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 T, V( O1 H; ]# E6 `% Q& L, ]( O9 b% k' P8 i3 X
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- k2 N9 I' Z$ C9 C7 [
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! C. j+ f" b8 I2 @
    mcasp->regs->PFUNC      = 0;          // All MCASPs
* \# C! r0 H$ k, D0 B6 H    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 p9 ?2 o* o2 S. v9 y" h$ I- b/ C" N* K
    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 ?% c- L/ g. m# ~    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; I/ H6 ]  F, H! _! g6 S1 J7 }% U* N    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 V: Z0 @3 e+ I! R, n5 r- X: Y" j5 [, c$ @1 E
/* Starting sections of the McASP*/
3 c& E: ]/ T$ F2 k; e) l    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ X. _; [6 r( E- N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / H' x1 y. a4 u; E# D" S
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ v6 o/ J) `  R6 z& ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 p. F7 `( c: O
" q/ Q! R2 ~3 V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% H, S0 V1 Q/ w4 X7 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# J$ b) Z( {. A  c* `' e    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & Y5 n  W7 `7 N" u$ y: b: l5 S9 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, b2 F2 H) S; N
* e2 _0 Q; W, u  ]! _
    mcasp->regs->XSTAT = 0x0000ffff; % w5 b' V; a; v( {6 g( F, @& b
    mcasp->regs->RSTAT = 0x0000ffff;
% q2 u( T3 a# i* \9 d1 ]' O6 n$ b5 g6 ~$ \* l
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 l/ z# b! w9 N7 F( X; r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 h. W: V' t  C+ `" C/ D    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* s- o; S  l1 K& j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# b) V0 R# }# @# j4 t5 t$ w% W& I) l. X' J% }3 Z9 |/ N' D. A
    /* Write a 0, so that no underrun occurs after releasing the state machine */
  x" n5 ^1 s% D: g# G, Q    mcasp->regs->XBUF5 = 0;
0 g. |% A6 ~0 r) i7 g    mcasp->regs->RBUF0 = 0;) |# A8 @& v. `# B
5 K, B/ X) A$ ]& t4 b; Q' R4 a
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " A  Q4 J0 G" e5 w, L) B" C+ W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 R+ t2 e! ?# L5 N. {    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # s" r9 t$ e* a3 M- F- x9 M0 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 _, n' A( l+ ^5 F& K

2 E! W, r1 V! C# V1 P0 Q1 U4 T    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 o% E$ V" Z# h7 R  H. C, {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# N8 h! B  ~) f2 k    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 J2 l0 }- W0 R& |* G4 g% x$ ^4 ]2 p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
: k$ H- w% }% A2 D
% T# Z  j+ d) k/ p9 b) {1 p    CSR = 0x0000;
! H8 ]/ x/ a) b" F. K    INTC_INTMUX1 = 0x3d;9 M+ ~: o6 j, m8 E; e; P2 K
    ISTP = (unsigned int)vectors;
9 T8 Y! Y/ g4 T2 [: Z- Y/ A    ICR = 0xFFF0;  
; a$ u6 x" |8 x5 s3 \, U    IER |= 0x12;  
" ?5 t+ S; l$ Q$ i& x7 V    CSR |= 0x01;  - [0 A& \* _# h  z" e# N
6 [8 k5 d' a' v2 p

! D2 o2 ^5 ?4 B! H1 l; u( n7 t" y' q/ v2 n% g! Q* Q
还有就是两个输入输出函数:
9 c  w. P9 Y; Cvoid output_sample(Int32 out_data)0 C8 i" U$ B7 n1 M# u
{
, s1 t+ B2 B; P- K8 {' @% I5 h  AIC31_data.uint = out_data;  3 S' {4 ?5 Z$ C
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 z1 j6 _' P$ j' d; x" ]" f}
1 \$ v! q1 z( P! ^# k
/ H+ t$ H& t& e% J: ]Int32 input_sample(void)( }8 A" P2 n+ R
{  
' V! \2 m( \* \  AIC31_data.uint = MCASP1_RBUF0_32BIT;, N0 r  i  b7 B* o( A
  return (AIC31_data.uint);1 ]- ]! x" O* v9 s
}
& g4 z& w! x. @& J# R. r  F1 _/ K8 E% v6 g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-15 23:30 , Processed in 0.044372 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表