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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& v2 n  d2 I6 Rmain文件:
' J$ @% L! Z* _6 c; E- ~interrupt void interrupt4(void)  
6 M0 Y: C4 L4 A$ R{
5 R* Y" w3 _- I- A% u* ]: ^  Uint32 sample;; _5 p  N5 E7 a9 u( x

  w- K( E7 N# T* P  sample = input_sample(); // read L + R samples from ADC
. o) a! Z% l  T  output_sample(sample);   // write L + R samples to DAC 0 l( w2 X+ V' m) w
  return;
. b  z/ ~7 [" ]% A/ k$ t& i}* f1 r3 }: y1 \6 K+ p) H

5 g5 ]( p# O% i) r* `5 k$ eint main( void )
. i: B- d0 q7 o# z1 N{5 O" g8 z; T7 e2 \; w) N
  T1 }7 _1 c2 k2 |- |8 U% L
    /* Initialize BSL */
8 f" n( c" \2 @    EVMC6747_init( );
( |# V  x6 n: U% H/ H& a        /* Call evmc6747_intr function */
' P' m) ?1 N( K+ Q, l$ a    aic3106_init( );
* v7 e  R' J( K) R# u+ V        while(1);
; K! E6 Z- d. C) u( ]$ T}
2 H5 Z, O$ t& {/ \
  G: W6 U* E0 |4 D% L
- U3 A6 M4 A% d" e" @6 s9 C! qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, r0 ]+ v5 g* G/* Initialize MCASP1 */
: |* _1 m+ G3 J; ]: q8 D    mcasp = &MCASP_MODULE_1;$ s" f4 v- I) C* D+ {) Q1 I+ P+ ]
    mcasp->regs->GBLCTL  = 0;       // Reset& X' Y6 i7 x  x9 X' d
    mcasp->regs->RGBLCTL = 0;       // Reset RX( ^% l0 k  K. ~8 z
    mcasp->regs->XGBLCTL = 0;       // Reset TX
$ |) V* S. `7 l    mcasp->regs->PWRDEMU = 1;       // Free-running
7 K6 K9 W/ ]* J8 b& k' m   // configure McASP0 receive registers
5 t5 D: o6 @+ {8 q  @    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) D8 y2 I  _( z3 k7 C( X& m1 t
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# g, k- \! O+ g, v1 Z( {, F    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& j' P& K* X* l7 i' ^" H9 g- U    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ m* L5 ?' o5 e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ \4 G. x- }' G+ b    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ y7 n3 X/ P/ s$ S/ y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 z  T( l  x8 e3 T8 H5 c7 j( G    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, t9 L- g+ w9 k

7 d4 `: P* Y5 o9 E    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 D  i$ V- b( T. q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 |) R9 E# V. g5 S2 {
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' g8 U3 ]4 a0 P, Z( W/ M$ |    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- d; M( [9 \4 \% L6 ]
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, Q+ [0 R* Q( @; p4 s6 A    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  W/ M5 J9 y+ ^* O$ d
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ l3 Y, c% d/ H, y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! @8 a( [- l' h3 T* v  e& z
9 |1 J7 R+ z$ P0 W9 K" ]! B! J  V  o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 m+ ~, M( k, P1 A, T
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" Y2 J- \6 u! f/ o  X2 l0 E: P, s    mcasp->regs->PFUNC      = 0;          // All MCASPs- ~, R0 F4 F9 q' C9 q- b% x2 v  m' G
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  ?% D& S! x# S/ w0 A

+ J( f# Y; {5 ^    mcasp->regs->DITCTL     = 0x00000000; // Not used+ h  m6 Z& ], ^! C2 ]: T
    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ k- v4 H" n% C0 _) V- K! O0 D
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 U  _  u3 T% q5 U# u
5 ~) l' o: Z' b) e* U3 Z
/* Starting sections of the McASP*/
2 V& e3 ^. \7 d: d( j    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' j: o) H' [5 H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 D* d% K% {0 o7 b  q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) M' E8 c3 m. d/ R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; V0 I! v! `4 H! }) I0 ^' ]$ |1 r3 d' e- d
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - ~' J0 d1 ~2 n1 }' I8 q) n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 j! p/ E* |) ]( f# O' z8 r7 z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& Q( }- p+ A; a- l( K. D: H; `& K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 h8 z" l- g8 T6 a  |1 A: t( j
* r. d6 X4 b' l& M. M' k2 `
    mcasp->regs->XSTAT = 0x0000ffff; ) {/ l- G% X4 l# V
    mcasp->regs->RSTAT = 0x0000ffff;
, N/ \5 c/ ?- p
/ z9 d% M+ Z/ Y* |' m% A( U0 s. X  t    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) Z: h+ W4 ?* U* D+ `9 @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ H' f) c# S" w! v. l# m
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ q( L+ X/ }2 \! Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) M3 y6 X4 _2 {. _
4 T% r# n0 m, v0 L) C    /* Write a 0, so that no underrun occurs after releasing the state machine */. k3 C0 \+ ?: q+ i
    mcasp->regs->XBUF5 = 0;
" i% C& m9 O" T    mcasp->regs->RBUF0 = 0;; v% o- V/ ^5 \
. \1 q; l2 r% [+ l
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % |- J" _! Z: o' _9 K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 r( _2 |/ O5 n    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * X8 S  x8 A& e) P* H5 m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 ]$ e9 u3 r. `: S' G5 J

  o# q6 D6 r4 }4 W7 q3 n9 K    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 ^6 Z- H5 ~7 r: r! U) M+ w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) Z; Z! e4 {9 c2 W) R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* z! l" h  A* ]' s8 ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! Y: Q  Y7 w( W$ |
' R7 a& `0 W: e% i    CSR = 0x0000;. O: `- X6 a, |
    INTC_INTMUX1 = 0x3d;- |: N2 U- H) \$ n$ @$ M
    ISTP = (unsigned int)vectors;+ O% j- O3 [+ P! `  G* ~
    ICR = 0xFFF0;  
4 A8 g) J% n( A$ R& E% D2 f    IER |= 0x12;  
2 x+ V5 ~+ z- P0 E) I    CSR |= 0x01;  8 E8 i5 {4 O, Z  S% `
0 C8 B) ~: V! k7 O9 l) j5 W

' A  p+ O/ q+ P/ a; L
$ D% v( e' C) z  W还有就是两个输入输出函数:2 @; ]% l, d$ n, p0 I
void output_sample(Int32 out_data)
% w: a/ \0 u% N2 C- `{8 a9 M6 c# {: M
  AIC31_data.uint = out_data;  7 j0 V2 r' `8 C, W
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* j! Y% D" L8 @  b: O! b9 P
}
( {) S0 Y: O4 z2 N0 r9 l0 a9 P9 Q$ B
Int32 input_sample(void)
2 ~4 L, c# j; C7 |3 I+ v. J6 v, F{  
4 I* o5 m( ]! J  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 m1 Z) a9 n, N2 I, p& e* W$ a+ r  return (AIC31_data.uint);
1 H  J& a* y) r}. K3 ]  _  a+ V6 Q1 e, u" P
9 k8 Z5 {1 S7 j) t
分享到:  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-3-24 07:24 , Processed in 0.046592 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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