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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 ]% S+ c# I. f- o1 X. j( F. E. h- cmain文件:7 F5 I9 j% g& _" x
interrupt void interrupt4(void)  
9 c( c4 U2 ]% h# Z! h" S{' e( |0 g3 N) z6 ]
  Uint32 sample;
1 H5 k" n3 p9 s
* M2 d) B3 G+ r8 r% h! T' c  sample = input_sample(); // read L + R samples from ADC# b6 U7 G5 Z  A2 r7 U  k
  output_sample(sample);   // write L + R samples to DAC
. J! S1 G, v3 Q* m( w  return;/ H' e6 c; L3 W% S1 x* i$ o
}
- y  k  U; N4 _; t& l/ U% T) m- Q! n3 g' K- M7 y+ t
int main( void )( Z  ?" c; G6 Z# |. A) L
{
& M0 Y* |. U& ^* ]" h) K$ [3 k
" L  F" _, c& ^4 a- t0 u    /* Initialize BSL */
5 a+ h/ G( k; Z1 U0 N" F    EVMC6747_init( );
- l7 a3 y* {  `+ p        /* Call evmc6747_intr function */+ G- ^' F" S; B0 a3 X% z* v
    aic3106_init( );1 p1 A1 H% g9 {5 P, j
        while(1);
( X0 ]4 w/ f" G. c9 A}: \( f4 w  U' I' ?1 o
3 u6 J1 }, O2 @7 z5 h2 h5 O% d
# A8 C! K& Q- S' u( ^9 b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: S  T* |6 I) N4 t! Z& S$ L  c9 {
/* Initialize MCASP1 */  }* [2 ]1 k  e7 r; `  n
    mcasp = &MCASP_MODULE_1;
6 B7 V; O# @3 a5 l  V1 X    mcasp->regs->GBLCTL  = 0;       // Reset
% R: U7 n, @* I/ s7 ?; k) w6 `    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ D6 C$ h4 ]. `: y' O    mcasp->regs->XGBLCTL = 0;       // Reset TX
( l- c% L* `# \- x3 u+ J    mcasp->regs->PWRDEMU = 1;       // Free-running- E3 l7 S+ b: f" p2 ]* M2 B3 k
   // configure McASP0 receive registers! ?! w) u$ O6 M2 Z$ H, e5 G% I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) G5 s% l3 z0 q: l
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# C# X2 V( P) }, u  P1 h/ D    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ z- x% z# G- `3 g. q* e1 N
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). c6 f7 V) s% N5 u
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 s& {+ J8 ]4 p) D4 d
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ @. k+ K9 ]6 s/ b    mcasp->regs->RINTCTL    = 0x00000000; // Not used- d; M+ Y% U, m0 K
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 Q  M5 w0 _8 \) k* Z
/ S2 ?# _: j5 Y3 {( K0 M: E    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: [/ a) u& L7 t' t/ e6 o: K9 P1 j# r# ]  S
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 G9 l5 `) L' {; R& I& C) N# k! A    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  _- p" t: p6 K; X3 S$ O! B6 G# [8 m  h* o
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 q4 c; B/ n* {    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 {! f1 S1 v/ _) }: g* z5 u" C
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. q# ^$ E4 E2 k5 C. {! p    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ D( j% S) J8 p0 K/ i* Z) I" k
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& }4 v' D: W  C2 e( h7 H. H7 y
0 y# u' j6 s( x0 t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 e5 f/ [# Y$ a4 a  A; \+ p/ q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( |( L+ i8 A8 F3 U
    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 G, e) P: R8 \/ |' l  ?# W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 _- r6 B9 s+ @! c; Z
$ d5 Q1 m4 A! {  H( \0 ^/ L1 i
    mcasp->regs->DITCTL     = 0x00000000; // Not used8 a5 V( j  O+ ]; p4 }" t7 v
    mcasp->regs->DLBCTL     = 0x00000000; // Not used. X+ r/ }; S7 V& {) F$ U
    mcasp->regs->AMUTE      = 0x00000000; // Not used0 L$ d0 C) f/ j' `" \
) B' ?7 f0 ?9 d: J* s. K
/* Starting sections of the McASP*/6 Y% _/ U2 [9 ?2 C) v& L- `
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ P3 q& X3 K/ R, f! I6 }% z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( V" e+ r1 X  c$ [4 d; L
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 [  E- w# b' t  L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 ?# i2 S* m; I# [7 `$ B
( P) _/ e" D9 {, X
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : D+ k# h5 X/ x+ T+ j% z+ Y1 E' Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 i  j  T9 X5 @: J    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, d- F+ g* X3 |* c7 n, L0 Q, b) e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& v. N% H7 ]* O+ y+ r
& u) m5 g* {1 m    mcasp->regs->XSTAT = 0x0000ffff; 3 N1 g# `! m: d: r. }4 H, D
    mcasp->regs->RSTAT = 0x0000ffff; , n* x2 J/ [) _
" t6 J) R- p! U/ _4 k) n: `4 _# @
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) C" R. D8 u+ Q" b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! ~, v2 \  r/ I! H2 x, W$ a
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' g/ c. F+ o/ w/ R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, C# q8 c/ E$ r1 X& _% u, A3 m; l
8 r- \# X6 a  U3 n0 I9 Z7 x
    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ o. S9 v7 {  g( s3 o! N    mcasp->regs->XBUF5 = 0;7 l1 p5 Y, S6 U% Y/ i
    mcasp->regs->RBUF0 = 0;
- ~) W6 t  {$ A% c% `( F
1 n/ n' _8 k  Y! ~7 h    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 k# s: T/ E* s% C7 Q7 H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 }- _: i$ u" W
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* T. I) ~3 Q7 x; Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ d4 T7 ^) G8 c8 d
' J+ i- |( p" a& A: t
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : O+ N  n+ k8 k: l0 p. p' W6 [7 W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: ?2 c2 n& b# T6 P( c8 }: n, w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " }1 k/ U4 y2 m/ k' b/ {9 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
: i4 ~; `  A3 f! s1 F
; J  |8 l, m; Y! K0 C    CSR = 0x0000;
( _4 B+ S3 h" \    INTC_INTMUX1 = 0x3d;; ?% d+ X7 v3 T. x6 p( F
    ISTP = (unsigned int)vectors;8 N3 k4 D2 M- U) F' p( [# Q, Z4 x
    ICR = 0xFFF0;  
$ U' I5 K6 \/ A3 a0 S    IER |= 0x12;  1 l9 ]2 }" b! M; P
    CSR |= 0x01;  6 u% N# O8 N: P8 \# k  h
# A* U8 ^, u, ]* k9 w4 T2 _' H
7 q! Y3 D: C  B( L

* ~6 {0 ~- ]/ s; m还有就是两个输入输出函数:! V/ v4 l% T2 {  M0 ~
void output_sample(Int32 out_data), ]7 Y% K: x8 _, {8 i# O' j
{: O; v, _  ~  E
  AIC31_data.uint = out_data;  
8 c# Y9 \, T9 V( _  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% \& z9 i6 M( J' A; h# b& j6 K}2 P) s. m( s/ D

4 X" o9 {4 }: @  J: t( g8 GInt32 input_sample(void)( P& |& q) j, \! P
{  
) ~0 |* m( s$ ?; l2 K8 A' |; P  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 ^, T6 b% N6 x! v9 E. G
  return (AIC31_data.uint);4 r( G4 l+ ^" O0 T% B0 {1 p
}6 A* G1 y9 C  K! ]) M

6 L0 r. ~- ?) @' E  Q, 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-3-12 02:40 , Processed in 0.047847 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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